我正在研究Immediatly Invoked Function Expressions(IIFE)的行为,在这样做时我遇到了以下情况.
(function () {
document.write("bar");
})
(function () {
document.write("foo");
}());
Run Code Online (Sandbox Code Playgroud)
我认为第一个只是一个分组运算符,里面有一个函数表达式而不调用它.第二个是分组运算符以及函数表达式,但现在调用该函数.
我觉得奇怪的是两者都被调用了,为什么呢?
(function () {
document.write("bar");
})
var x = 1;
(function () {
document.write("foo");
}());
Run Code Online (Sandbox Code Playgroud)
当我通过在两者之间插入变量声明来打破这两个时,它只是写foo.这是我的预期.
Fel*_*ing 15
因为您在第一个函数表达式后忘记了分号:
(function () {
document.write("bar");
});
Run Code Online (Sandbox Code Playgroud)
否则,第二个"分组运算符"被解释为函数调用.所以这:
(function a() {
...
})
(function b() {
...
}());
Run Code Online (Sandbox Code Playgroud)
基本相同:
function b() {
...
}
(function a() {
...
})(b());
Run Code Online (Sandbox Code Playgroud)
重新排序使它更容易看到.请记住,空格字符在JavaScript中没有任何意义,会被忽略.
| 归档时间: |
|
| 查看次数: |
1437 次 |
| 最近记录: |