删除一些代码行时为什么会出错?

时间:2014-10-29 15:59:28

标签: javascript html

以下代码按预期工作

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

我没有更改上面的任何代码,只是注释两行与其他行分开,然后浏览器给我错误信息?有人可以请我澄清一下吗?非常感谢。

2 个答案:

答案 0 :(得分:3)

如果没有分号,您的第二个样本将被解析为

obj = { ... }(...)();

由于该对象不是函数,因此在尝试调用它时会出错。

Javascript中的分号是可选的,你的第一个样本是没有分号的无效语法,所以它隐式插入一个分号。

答案 1 :(得分:1)

(之后紧接着},所以你试图将评估块的结果称为函数。

然而,在您这样做之前,您正在尝试评估a = obj.go,以便它可以作为参数传递。

由于尚未定义obj(因为调用“函数”的结果尚未传递给obj),因此会抛出错误。