这段JS代码是怎么回事?
Whats going on in this bit of JS code?
我正在看一个Angular JS教程,它一直在使用这个代码片段的变体,而没有解释它。
(function(param, undefined){
//Normal function definition in here
...
}(bar.foo = bar.foo || {}));
所以我得到的最多。我认出了下面这个自执行的函数,用来封装javascript的一些代码,以避免作用域污染。
(function(param, undefined){
//Normal function definition in here
...
});
但是我不明白函数定义后面有括号的语法。
编辑
我明白括号里面发生了什么。我不明白的是函数定义后括号的语法:function(...){...}(...);
这是一个需要参数的自执行函数。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");
<div id="result"></div>
函数正在被触发。Foo = bar。Foo ||{})作为参数。如果酒吧。Foo存在,那么函数将取bar。Foo作为参数。如果它是未定义的(这是假的),那么它将接受{}作为参数。我希望这对你有帮助!
在函数声明后加上圆括号将立即启动对它的调用。这和下面的操作是一样的:
var fn = function () { ... };
fn();
因为函数声明的返回值是函数对象,当对函数对象应用括号时,调用它。像往常一样,括号内的内容是函数的参数
foo被定义,使用它——但如果它没有定义,使用这个空对象({}
)
编辑-适合新的说明
它的位置意味着在执行函数之前,它将处理bar。foo赋值;比如设置默认值
相关文章:
- Javascript袖珍参考,第121页:这是怎么回事;猴子补丁”;方法应该有效
- 基本的HTML Javascript程序.这是怎么回事
- 每次运行此代码时,我都会得到不同的结果,这是怎么回事
- jQuery extend 函数是怎么回事
- “Bada” - 这个JavaScript片段是怎么回事
- 如何使文本字段为空?这是怎么回事
- 自定义SVG签名在CODEPEN上有效,但在本地机器上无效-这是怎么回事
- 事件侦听器不会在IE中被调用 - 这是怎么回事
- HTML 中的空脚本标签是怎么回事
- 这个JavaScript片段是怎么回事
- 调用堆栈超出,甚至没有任何递归.这是怎么回事
- 带有奇怪输出的单行 - 字符串作为“这个”是怎么回事
- 这个速记运算符是怎么回事
- 网站似乎在没有向服务器发送密码的情况下登录用户;这是怎么回事
- 将多个值分配给一个变量.这是怎么回事
- 图片库的图片预装器?这是怎么回事
- 这个CSS渲染阻塞是怎么回事
- Javascript中的回调真的是方法调用吗?如果是的话,他们是怎么回事'级联'
- 有人能解释一下这部分是怎么回事吗
- 这段JS代码是怎么回事?