向外部函数传递参数的自执行函数

Self-Executing function passing arguments to external function

本文关键字:函数 参数 执行 外部      更新时间:2023-09-26

我在javascript中看到了一些结果,同时使用了全局定义的函数和我不理解的自执行匿名函数。这是代码:

var outerFunc = function(obj) {
    console.log(obj);
}
(function() {
    outerFunc({name: "my object"});
})();

这里的结果是以下内容作为字符串记录到控制台:

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

当然,将"outerFunc"放在另一个函数的作用域内会很好地将对象记录到控制台。

有人能向我解释一下为什么这个功能是这样的吗?我怀疑这与闭包和超出范围的变量有关,但我并不乐观。

您忘记关闭变量语句,这就是无法工作的原因

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