所以我用Javascript编写了一些东西,一段时间后我看到我在下面的代码中写了一个拼写错误:
(function() {
var someEl = document.getElementById('id-of-some-el'),l <-----
someOtherEl = document.getElementById('some-other-el');
someEl.onclick = function() {
...
};
})();
注意l
不应该在那里。我只在Firefox中对此进行了测试,但为什么我没有收到语法错误?
答案 0 :(得分:4)
您试图在var
语句中创建两个变量:
var someEl = document.getElementById('id-of-some-el'),
someOtherEl = document.getElementById('some-other-el');
逗号的引入意味着您创建了someEl
和l
:
var someEl = document.getElementById('id-of-some-el'),l
JS行末尾的分号是可选的,所以现在你有了一个独特的第二行代码:
someOtherEl = document.getElementById('some-other-el');
这是有效的,因为你可以在没有明确var
的情况下分配给变量(虽然它们对你的程序有一些不同的语义)。
答案 1 :(得分:1)
因为带有半冒号的结束行不是强制性的,所以此代码的评估如下:
var someEl = document.getElementById('id-of-some-el'), l;
someOtherEl = document.getElementById('some-other-el');
答案 2 :(得分:1)
这是有效的,因为分号不是强制性的。
someEl
和l
将是本地变量
someOtherEl
将是全局的,因为它现在没有var
l
将未定义。
使用console / alert查看它。
var a,b,c;
alert(a);
答案 3 :(得分:0)
您不小心创建了三个变量:someEl
,l
和someOtherEl
新行表示此实例中的新语句。
如果你把它们放在同一条线上,例如:
var someEl = document.getElementById('id-of-some-el'),l someOtherEl = document.getElementById('some-other-el');
你会得到Syntax Error: Unexpected identifier
,正如你所料。
答案 4 :(得分:0)
这等于
var someEl = document.getElementById('id-of-some-el');
var l;
someOtherEl = document.getElementById('some-other-el');
在更严格的语言中,这也不是一个语法错误,但它可能会对编译语言中未使用的变量发出警告。
JavaScript非常宽容,有时可以提供一些有趣的调试会话,因为它很乐意接受一个未定义的变量(可能是另一个变量的拼写错误)突然出现在任何地方。
答案 5 :(得分:-1)
虽然您编写的代码在技术上是有效的,但JSLint会将其报告为警告。
第1行角色56的问题: 预期';'而是看到了 'someOtherEl'。
var someEl = document.getElementById('id-of-some-el'),l
第2行第9个问题: 之前使用'someOtherEl' 定义
someOtherEl = document.getElementById('some-other-el');