这段JS代码是怎么回事?

时间:2015-09-02 21:42:36

标签: javascript angularjs

我正在观看一个Angular JS教程,该教程一直使用此代码段的变体而不解释它。

(function(param, undefined){
  //Normal function definition in here
  ...
}(bar.foo = bar.foo || {}));

如果这样的话,我会得到最多。我认识到以下一个用于封装javascript的自执行函数,以避免范围污染。

(function(param, undefined){
  //Normal function definition in here
  ...
});

但是我不理解函数定义后括号的语法。

修改

我理解括号内的内容。 我不明白的是在函数定义之后有括号的语法:function(...){...}(...);

4 个答案:

答案 0 :(得分:1)

这是一个需要参数的自执行函数。 bar.foo是发送给它的参数(在使用函数时将是param)。 如果bar.foo在执行函数之前没有值,则将其设置为{},否则将其设置为自身,然后传入。



(function(param1, param2, param3) {
  var ele = document.getElementById("result");

  ele.innerHTML += "param1: " + param1;
  ele.innerHTML += "<br />";

  ele.innerHTML += "param2: " + param2;
  ele.innerHTML += "<br />";

  ele.innerHTML += "param3: " + param3;
  ele.innerHTML += "<br />";

  param3 = param3 || "bananas";
  ele.innerHTML += "param3 after change: " + param3;

})("apples", "oranges");
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用(bar.foo = bar.foo || {})作为参数触发该函数。如果bar.foo存在,则该函数将bar.foo作为参数。如果它是未定义的(这是假的),那么它将接受{}作为参数。我希望这有帮助!

答案 2 :(得分:1)

在函数声明后放置括号会立即启动对它的调用。这与此相同:

Interface

因为函数声明的返回值是函数对象,并且当您将括号应用于函数对象时,您可以调用它。并且,与往常一样,这些括号内的东西是函数的参数。

答案 3 :(得分:0)

如果定义了bar.foo,请使用 - 但如果不是,请使用此空对象({}

编辑 - 以适应新的澄清

它的位置意味着在执行函数之前,它将处理bar.foo赋值;比如设置默认值。