我在javascript中看到一些结果,同时使用全局定义的函数与自动执行的匿名函数混合,我不明白。这是代码:
var outerFunc = function(obj) {
console.log(obj);
}
(function() {
outerFunc({name: "my object"});
})();
此处的结果是以下内容以字符串形式记录到控制台:
function () {
outerFunc({name: "my object"});
}
放置" outerFunc"当然,在其他函数范围内将对象记录到控制台就好了。
有人可以向我解释为什么这样功能吗?我怀疑它与闭包和变量超出范围有关,但我不是正面的。
答案 0 :(得分:3)
你忘了关闭变量语句,这就是它无效的原因
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
,这就是函数被记录为字符串的原因。