Javascript关闭意外结果

Mic*_*lYu 28 javascript

关闭代码非常简短:

var fn = function() {
    return function() {
        console.log(arguments);
    }
}

(function(arg) {
    console.log('bar');
})('foo');
Run Code Online (Sandbox Code Playgroud)

为什么["foo"]打印而不是bar?如果我注释掉var fn = ...,结果是预期的并bar打印出来.这两段代码如何相关?

Dam*_*vic 31

如果没有后分号}fn,你实际上是调用fn带有参数(function...).

如果添加缺少的分号,它会按预期工作:

var fn = function () {
    return function () {
        console.log(arguments);
    }
};

(function (arg) {
    console.log('bar');
})('foo');
Run Code Online (Sandbox Code Playgroud)

  • 实际上他并没有调用`fn`,而是将两个调用的结果分配给它(`undefined`). (2认同)