自执行函数将参数传递给外部函数

时间:2014-04-11 18:30:25

标签: javascript

我在javascript中看到一些结果,同时使用全局定义的函数与自动执行的匿名函数混合,我不明白。这是代码:

var outerFunc = function(obj) {
    console.log(obj);
}

(function() {
    outerFunc({name: "my object"});
})();

此处的结果是以下内容以字符串形式记录到控制台:

function () {
    outerFunc({name: "my object"});
}

放置" outerFunc"当然,在其他函数范围内将对象记录到控制台就好了。

有人可以向我解释为什么这样功能吗?我怀疑它与闭包和变量超出范围有关,但我不是正面的。

1 个答案:

答案 0 :(得分:3)

你忘了关闭变量语句,这就是它无效的原因

var outerFunc = function(obj) {
    console.log(obj);
}; // semicolon needed

(function() {
    outerFunc({name: "my object"});
})();

FIDDLE

分号并不总是可选的,在这种情况下,它被解析为

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,这就是函数被记录为字符串的原因。