Javascript奇怪的语法

时间:2011-06-20 11:51:20

标签: javascript

所以我用Javascript编写了一些东西,一段时间后我看到我在下面的代码中写了一个拼写错误:

(function() {

    var someEl = document.getElementById('id-of-some-el'),l    <-----
        someOtherEl = document.getElementById('some-other-el');

    someEl.onclick = function() {
       ...
    };

})();

注意l不应该在那里。我只在Firefox中对此进行了测试,但为什么我没有收到语法错误?

6 个答案:

答案 0 :(得分:4)

您试图在var语句中创建两个变量:

var someEl = document.getElementById('id-of-some-el'),
    someOtherEl = document.getElementById('some-other-el');

逗号的引入意味着您创建了someEll

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)

这是有效的,因为分号不是强制性的。

someEll将是本地变量

someOtherEl将是全局的,因为它现在没有var

l未定义

使用console / alert查看它。

var a,b,c;
alert(a);

答案 3 :(得分:0)

您不小心创建了三个变量:someEllsomeOtherEl

新行表示此实例中的新语句。

如果你把它们放在同一条线上,例如:

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');