var globalVar = globalVar || {};
globalVar.object1 = {};
globalVar.object1.object2 = { a: "hello" }
(function(x){
    x.hello = 'its me';
}(globalVar.object1.object2));


为什么我不能将globalVar.object1.object2作为对象传递给var x?它返回一个错误

VM3167:5未捕获的TypeError:无法设置未定义的属性“ hello”

最佳答案

这是因为IIFE之前缺少分号。

因此,将IIFE的外部paren视为从对象字面量开始的函数调用,但这不会导致错误,因为该调用的args首先被求值。在这种情况下,该参数将是调用IIFE的结果,这意味着您要尝试在分配给.object2的表达式完全完成之前将.object2传递给IIFE,这意味着.object2尚未存在。

09-25 16:32