关闭代码很短:
var fn = function() {
return function() {
console.log(arguments);
}
}
(function(arg) {
console.log('bar');
})('foo');
为什么要打印["foo"]
而不是bar
?如果我发表评论var fn = ...
,则结果符合预期,并打印bar
。这两段代码如何相关?
答案 0 :(得分:31)
在}
的{{1}}之后没有分号,您实际上是使用参数fn
调用fn
。
如果添加缺少的分号,它会按预期工作:
(function...)
答案 1 :(得分:4)
为什么要打印
["foo"]
而不是'bar'
?这两段代码如何相关?
使用(function(arg) {…})
周围的括号,它被视为函数表达式的参数,就像您期望('foo')
成为IEFE的参数一样。实际上,foo
现在传递给作为第一次调用结果的函数:
var fn = (
(function() {
return function() {
console.log(arguments);
};
})
(function(arg) {
console.log('bar');
})
)
('foo');
要解决此问题,请在分配后始终使用分号,或使用函数声明:
function fn() {
return function() {
console.log(arguments);
}
}
(function(arg) {
console.log('bar');
})('foo');
答案 2 :(得分:3)
在变量定义之后添加分号,如下所示:
var fn = function() {
return function() {
console.log(arguments);
}
};
(function(arg) {
console.log('bar');
})('foo');
日志' bar'。