开发者

Javascript weird syntax

开发者 https://www.devze.com 2023-03-14 14:43 出处:网络
So I was programming some stuff in Javascript and some time later I saw I made a typo in the following piece of code:

So I was programming some stuff in Javascript and some time later I saw I made a typo in the following piece of code:

(function() {

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

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

})();

Notice how the l isn't supposed to be there. I've only tested this in Firefox but, why didn't I get a syntax erro开发者_开发知识库r?


You were trying to create two variables inside the var-statement:

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

The introduction of the comma meant that you created someEl and l:

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

Semicolons at the end of JS lines are optional, so now you have a distinct, second line of code afterwards:

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

And this is valid because you can assign to variables without explicitly var-ing them (albeit imbuing slightly different semantics to your program).


since ending lines with semi colons is not mandatory this code is being evaluated like this:

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


It is valid since semicolons are not mandatory.

someEl and l would be local variables

someOtherEl would be global since it now has no var

l would be undefined.

Use console/alert to see it.

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


You've accidentally created three variables: someEl, l and someOtherEl

The new line denotes a new statement in this instance.

If you put them all on the same line, eg:

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

you'd get Syntax Error: Unexpected identifier, as you expected.


This is equal to

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

Which is not really a syntax error in stricter languages either, but it would perhaps give a warning about an unused variable in compiled languages.

JavaScript is very forgiving, which can sometimes give some interesting debugging sessions as it happily accepts a undefined variable (that may were a typo for another variable) suddenly appearing anywhere.


Although the code you've written is technically valid, JSLint will report it as a warning.

Problem at line 1 character 56: Expected ';' and instead saw 'someOtherEl'.

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

Problem at line 2 character 9: 'someOtherEl' was used before it was defined.

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

0

精彩评论

暂无评论...
验证码 换一张
取 消