我正在观看一个Angular JS教程,该教程一直使用此代码段的变体而不解释它。
(function(param, undefined){
//Normal function definition in here
...
}(bar.foo = bar.foo || {}));
如果这样的话,我会得到最多。我认识到以下一个用于封装javascript的自执行函数,以避免范围污染。
(function(param, undefined){
//Normal function definition in here
...
});
但是我不理解函数定义后括号的语法。
修改的
我理解括号内的内容。
我不明白的是在函数定义之后有括号的语法:function(...){...}(...);
答案 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;
答案 1 :(得分:1)
使用(bar.foo = bar.foo || {})作为参数触发该函数。如果bar.foo存在,则该函数将bar.foo作为参数。如果它是未定义的(这是假的),那么它将接受{}作为参数。我希望这有帮助!
答案 2 :(得分:1)
在函数声明后放置括号会立即启动对它的调用。这与此相同:
Interface
因为函数声明的返回值是函数对象,并且当您将括号应用于函数对象时,您可以调用它。并且,与往常一样,这些括号内的东西是函数的参数。
答案 3 :(得分:0)
如果定义了bar.foo,请使用 - 但如果不是,请使用此空对象({}
)
编辑 - 以适应新的澄清
它的位置意味着在执行函数之前,它将处理bar.foo赋值;比如设置默认值。