2014-05-14 71 views
-9

功能是:爲什麼這個功能不符合JavaScript的質量

(function (x,y) {return x+y})('foo') 

我學習JavaScript。

我不知道這句話的意思。這似乎是一個功能。但是,當我使用它作爲

foo(1,2) 

它給出錯誤。 誰能告訴我那句話是什麼意思?這是一個函數還是一個錯誤的陳述?如果是功能,我該如何使用它?或者是

有來自Facebook API的演示,這是

(function(d, s, id){ 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/sdk.js"; 
    fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

我不明白這個代碼類似的功能。它是以document, 'script', 'facebook-jssdk'作爲輸入的函數嗎?如果是,函數名稱是什麼? 謝謝!

+3

到底是什麼問題? – Whymarrh

+0

它的工作原理與預期完全一樣 - > ** http://jsfiddle.net/adeneo/n3Eb4/** – adeneo

+4

到底「不符合javascript的質量」是什麼意思? – user2357112

回答

3

你有一個匿名函數接受兩個參數xy。它正在返回這兩者的組合。該函數以'foo'作爲字符串被調用,因此返回結果爲'fooundefined'

由於沒有任何東西可以存儲這個任務,並且y沒有被使用,所以採取這種方法似乎毫無意義。通常情況下,立即調用的函數表達式會有一個副作用影響或返回一個構造對象給變量。

(function(x,y){ 
    document.getElementById(x).innerHTML = y; 
})('foo',5) 

var add = (function(x,y){return x+y})(1,2); 

編輯

在回答您的編輯,如果你要命名需要拿出參數前一個功能,它需要提供表達範圍之外。因此,爲了將foo定義你會用

function foo(x,y){ 
return x+y; 
} 

,然後你可以使用它

var add = foo(1,2); 
+0

在這裏:'(function(x,y){return x + y})('foo')',我可以說'(function(x,y){return x + y})'是函數體, 'foo'是函數的名字? – tqjustc

+0

這不會是正確的。 ''foo''是參數x和y傳遞給一個匿名函數的參數。由於只傳遞了foo,所以x接收foo並且y變得未定義。該函數沒有名字,並且是匿名的。 –

+0

我們不能重複使用匿名函數,對吧?那爲什麼創建?爲什麼不直接使用這些語句而不是創建一個匿名函數?謝謝。 – tqjustc