Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript奇怪的语法_Javascript - Fatal编程技术网

Javascript奇怪的语法

Javascript奇怪的语法,javascript,Javascript,所以我用Javascript编写了一些东西,过了一段时间我看到我在下面的代码中输入了一个错误: (function() { var someEl = document.getElementById('id-of-some-el'),l <----- someOtherEl = document.getElementById('some-other-el'); someEl.onclick = function() { ...

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

(function() {

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

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

})();

注意l怎么不应该在那里。我只在Firefox中测试过这一点,但为什么没有出现语法错误?

因为行尾带有分号不是强制性的,所以对这段代码的评估如下:

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

由于不强制使用分号结束行,因此此代码的计算方式如下:

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

它是有效的,因为分号不是必需的

Somel和l是局部变量

另一个是全局的,因为它现在没有var

我是不确定的

使用控制台/警报查看它

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

它是有效的,因为分号不是必需的

Somel和l是局部变量

另一个是全局的,因为它现在没有var

我是不确定的

使用控制台/警报查看它

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

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

var someEl = document.getElementById('id-of-some-el'),
    someOtherEl = document.getElementById('some-other-el');
逗号的引入意味着您创建了Somel和l:

JS行末尾的分号是可选的,因此现在您有了一个独特的第二行代码:

    someOtherEl = document.getElementById('some-other-el');

这是有效的,因为您可以分配给变量,而无需显式地对它们进行变量化,尽管在您的程序中嵌入了稍微不同的语义。

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

var someEl = document.getElementById('id-of-some-el'),
    someOtherEl = document.getElementById('some-other-el');
逗号的引入意味着您创建了Somel和l:

JS行末尾的分号是可选的,因此现在您有了一个独特的第二行代码:

    someOtherEl = document.getElementById('some-other-el');

这是有效的,因为您可以为变量赋值,而无需显式地对它们进行赋值,尽管在您的程序中嵌入了稍微不同的语义。

您意外地创建了三个变量:someEl、l和someOtherEl

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

如果你把它们放在同一行,例如:

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

您将得到语法错误:如您所料,是意外的标识符。

您意外地创建了三个变量:someEl、l和someOtherEl

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

如果你把它们放在同一行,例如:

var someEl = document.getElementById('id-of-some-el'),l someOtherEl = document.getElementById('some-other-el');
您将得到语法错误:如您所料,是意外的标识符。

这等于

var someEl = document.getElementById('id-of-some-el');
var l;
someOtherEl = document.getElementById('some-other-el');
这在更严格的语言中也不是真正的语法错误,但它可能会对编译语言中未使用的变量发出警告

JavaScript非常宽容,它有时会提供一些有趣的调试会话,因为它乐于接受一个未定义的变量,该变量可能是突然出现在任何地方的另一个变量的输入错误。

这等于

var someEl = document.getElementById('id-of-some-el');
var l;
someOtherEl = document.getElementById('some-other-el');
这在更严格的语言中也不是真正的语法错误,但它可能会对编译语言中未使用的变量发出警告


JavaScript非常宽容,它有时会提供一些有趣的调试会话,因为它乐于接受一个未定义的变量,该变量可能是突然出现在任何地方的另一个变量的打字错误。

尽管您编写的代码在技术上是有效的,但JSLint会将其作为警告报告

第1行的问题字符56: 期望“;”而是看到 “其他人”

var someEl=document.getElementById'id-of-some-el',l

第2行的问题字符9: “someOtherEl”在出现之前就被使用了 定义

someOtherEl=document.getElementById'some-other-el'


尽管您编写的代码在技术上是有效的,但JSLint会将其作为警告报告

第1行的问题字符56: 期望“;”而是看到 “其他人”

var someEl=document.getElementById'id-of-some-el',l

第2行的问题字符9: “someOtherEl”在出现之前就被使用了 定义

someOtherEl=document.getElementById'some-other-el'


只是一个猜测,但我认为可以使用逗号在JavaScript中定义多个变量。所以基本上你所做的就是定义变量Somel并通过设置一个值初始化它,还创建了一个名为l@fin1te:但是我在声明l之后没有加分号。这不应该是语法错误吗?:只是一个猜测,但我认为可以使用逗号在JavaScript中定义多个变量。所以基本上你所做的就是定义变量Somel并通过设置一个值初始化它,还创建了一个名为l@fin1te:但是我在声明l之后没有加分号。这不应该是语法错误吗?:其他人缺少var限定符,所以这不完全是同一件事。是的,我在提交它之后注意到。。固定的now@Tomalak盖雷特·卡尔:真的吗?JavaScript速记语法比我记忆中的还要奇怪;我已经有一段时间没有直接用JavaScript编写代码了。。。使用GWTcurrently@Stein: . :其他人缺少var限定符,所以这不完全是同一件事。是的,我在提交它之后注意到。。固定的now@Tomalak盖雷特·卡尔:真的吗?JavaScript短文
语法比我记忆中的更奇怪;我已经有一段时间没有直接用JavaScript编写代码了。。。使用GWTcurrently@Stein: . :Wide var隐式声明为全局变量,因此跟踪它可能是一个很大的难题。@jishi:是的,它可以,更糟糕的是,您永远不知道是否会覆盖已在别处声明的变量!唷!Wide var隐式声明为全局变量,因此跟踪它可能是一个很大的难题。@jishi:是的,它可以,更糟糕的是,您永远不知道是否会覆盖已在别处声明的变量!唷!只有经过严格的检查。这些更像是警告,而不是错误。我的观点是好的,语义是坏的。更新答案以反映这一点。更好。但仍然没有真正回答这个问题..:是的,进一步考虑一下,这更适合作为评论而不是回答。我能说什么。。。今天是星期一,只有在严格检查的情况下。这些更像是警告,而不是错误。我的观点是好的,语义是坏的。更新答案以反映这一点。更好。但仍然没有真正回答这个问题..:是的,进一步考虑一下,这更适合作为评论而不是回答。我能说什么。。。今天是星期一。