Javascript 向外部函数传递参数的自执行函数
我在javascript中看到了一些结果,同时使用了全局定义的函数和我不理解的自动执行匿名函数。代码如下:Javascript 向外部函数传递参数的自执行函数,javascript,Javascript,我在javascript中看到了一些结果,同时使用了全局定义的函数和我不理解的自动执行匿名函数。代码如下: var outerFunc = function(obj) { console.log(obj); } (function() { outerFunc({name: "my object"}); })(); 这里的结果是以下内容作为字符串记录到控制台: function () { outerFunc({name: "my object"}); } 当然,将“o
var outerFunc = function(obj) {
console.log(obj);
}
(function() {
outerFunc({name: "my object"});
})();
这里的结果是以下内容作为字符串记录到控制台:
function () {
outerFunc({name: "my object"});
}
当然,将“outerFunc”放在另一个函数的作用域中,可以将对象记录到控制台
有人能给我解释一下为什么会这样吗?我怀疑这与闭包和变量超出范围有关,但我不是肯定的。您忘记关闭variable语句,这就是它不起作用的原因
var outerFunc = function(obj) {
console.log(obj);
}; // semicolon needed
(function() {
outerFunc({name: "my object"});
})();
分号并不总是可选的,在本例中它被解析为
var outerFunc = function(obj) {
console.log(obj);
}(
function() {
outerFunc({name: "my object"});
}()
);
或者更容易阅读
var outerFunc = function(obj) {
console.log(obj);
}(function_goes_here_passed_as_argument);
因此,它不再是一个IIFE,而是一个作为参数传递的函数,在另一端作为
obj
结束,这就是为什么该函数被记录为字符串。非常有效。感谢您指出这一点,包括javascript如何实际解析该项的描述。有道理,而且非常有用!我会尽快接受你的答复。关于为什么立即调用函数表达式IIFE比自执行函数更合适。谢谢,我想知道这种函数的正确术语是什么。谷歌快速搜索证实,我不是唯一一个称之为“自动执行”的人,但现在我知道了正确的术语,我将使用iLife。