Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向外部函数传递参数的自执行函数_Javascript - Fatal编程技术网

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

Javascript 向外部函数传递参数的自执行函数,javascript,Javascript,我在javascript中看到了一些结果,同时使用了全局定义的函数和我不理解的自动执行匿名函数。代码如下: var outerFunc = function(obj) { console.log(obj); } (function() { outerFunc({name: "my object"}); })(); 这里的结果是以下内容作为字符串记录到控制台: function () { outerFunc({name: "my object"}); } 当然,将“o

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

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。