为什么这个功能不符合javascript的质量

时间:2014-05-14 23:26:33

标签: 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'为输入的函数吗?如果是,函数名称是什么? 谢谢!

1 个答案:

答案 0 :(得分: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);