以下代码按预期工作
obj = {
go: function() { alert(this) }
}
obj.go(); // object
(obj.go)(); // object
(a = obj.go)(); // window
(0 || obj.go)(); // window
但是当我评论开头的两行时为什么会出错?
obj = {
go: function() { alert(this) }
}
//obj.go(); // commented this line
//(obj.go)(); // commented this line
(a = obj.go)(); // window
(0 || obj.go)(); // window
我没有更改上面的任何代码,只是注释两行与其他行分开,然后浏览器给我错误信息?有人可以请我澄清一下吗?非常感谢。
答案 0 :(得分:3)
如果没有分号,您的第二个样本将被解析为
obj = { ... }(...)();
由于该对象不是函数,因此在尝试调用它时会出错。
Javascript中的分号是可选的,你的第一个样本是没有分号的无效语法,所以它隐式插入一个分号。
答案 1 :(得分:1)
(
之后紧接着}
,所以你试图将评估块的结果称为函数。
然而,在您这样做之前,您正在尝试评估a = obj.go
,以便它可以作为参数传递。
由于尚未定义obj
(因为调用“函数”的结果尚未传递给obj
),因此会抛出错误。