我一直在研究IIFE(即时调用函数表达式)并理解一般模式及其工作原理:
(function boo(y) {
alert(y);
})(2); // call, not a grouping operator, 2
在这种情况下:
function body(y){
alert(y);
}(2);
(2)只是一个分组运算符,它与调用函数语句无关,它与:
function body(y) {
alert(y);
}
(2);
我不明白这两个函数如何创建函数表达式而不是函数语句:
2, function () {
alert('anonymous function);
}();
// OR
!function () {
alert('Hello World');
}();
这两个函数如何充当表达式?我可以看到它们是匿名函数,但我不明白它们是如何表达的?为什么它们被执行而不是抛出某种形式的语法错误?
答案 0 :(得分:2)
首先,没有一个例子被称为“函数语句”。这是Mozilla唯一的语法区别,看起来像一个函数声明,但出现在语句块中。
在这种情况下:
function body(y){ alert(y); }(2);(2)只是一个分组操作符,它与调用无关 功能声明......
是的,(2)
将是一个分组运算符,因为函数声明已被提升,因此(2)
并未真正遵循它。
......它与:
相同function body(y) { alert(y); } (2);
是的,空格被忽略。
我不明白这两个函数如何创建函数表达式而不是函数语句:
2, function () { alert('anonymous function); }();// OR
!function () { alert('Hello World'); }();
它们是一个表达式,因为存在需要操作数表达式的运算符。因此,该函数成为操作数,因此被评估为所需的表达式。
所以仅仅是当程序被解析并遇到例如!
时,它知道下一步必须是一个表达式,所以当它评估它之后的function () {...
时,它将其视为一个有效的表达式,因此将其解释为。