2014-05-14 33 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