Why isn't it a must to declare a variable in Javascript before using it?

ぃ、小莉子 提交于 2020-01-03 10:05:21

问题


In Javascript we don't have to declare a variable with var keyword before using it. We can straight away do things like myCount = 12; or myStr = "Hello"; (where myCount, myStr are not declared before). Any such usage, declares and initializes the variables in the 'global' scope.

What could be the reasons for providing this feature? And is it a good standard at all?

UPDATE: My question is not what the differences are between 'using a variable without declaring' and 'declaring and then using' and how it affects scope.

My question is 'why it is allowed in javascript to use a variable directly without declaring it' as most of the programming languages have a strict check on this.

UPDATE : I see the following quoted text as a bad effect of this feature. So, why have this feature at all?

"Suppose there is a globally declared variable x (var x="comparison string") already which i am unaware of and i with intention of creating my own global 'x' inside one of my functions initialize one(x=-1) and there i end up breaking other functionality.

So, is there any good reason at all? for having this feature?


回答1:


Javascript was intended for very simple scripts in the browser. Requiring variable declarations seemed unnecessary.

Of course, it's an error in the language. And the makers of javascript know that. They wanted to change it. But they couldn't. Why?

Because Microsoft had already reverse engineered JavaScript and created their duplicate JScript, with bugs and all. Microsoft vetoed any changes, even bugfixes, since they were adamant about not breaking anyones scripts. So even if they changed JavaScript, JScript in IE would stay the same.

It's not a good reason. But it's the one we have.

Source: I got my javascript history class from Douglas Crockford: "The JavaScript Programming Language", http://video.yahoo.com/watch/111593/1710507 This part of the story is between 9 and 11 minutes into the video.




回答2:


Good reasons? Honestly can't think of one, it's one of the few things I really dislike about JS.

It's possible because everything happens within the global scope if not otherwise controlled and JS allows implicit variable creation like this. The cost of this is enormous potential for scoping bugs and pollution, and only benefit given that "this" exists to explicitly define self scope and "window" and "document" exist for global referencing, is saving a few characters - which is no reason at all.




回答3:


My question is 'why it is allowed in javascript to use a variable directly without declaring it' as most of the programming languages have a strict check on this.

That's the difference between statically and dynamically typed languages. Javascript is dynamically typed, so there is no need to declare first. As it was pointed out in other answers, var keyword is more responsible for scope of a variable than its declaration.

And I don't think that most programming languages have a check on that.




回答4:


Lua has a similar issue: any non-declared variable is global by default. In the mailing list it's a recurring theme, asking why shouldn't it be 'local by default'. unfortunately, that would introduce very nasty ambiguities in the language, so the conclusion typically is "global by default is bad, local by default is worse"




回答5:


Because it is a scripting language. Fact kids. And that is how it was designed!



来源:https://stackoverflow.com/questions/581679/why-isnt-it-a-must-to-declare-a-variable-in-javascript-before-using-it

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!