最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

programmeradmin1浏览0评论

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?

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?

Share Improve this question edited Feb 1, 2011 at 9:47 user492203 asked Feb 24, 2009 at 13:15 Real Red.Real Red. 5,0398 gold badges33 silver badges44 bronze badges 3
  • Worth putting your JS code through Crockford's JSLint to detect snafu's like that - and others :) – Kristen Commented Feb 24, 2009 at 14:46
  • (Sorry, I appreciate that isn't the answer to your question, it was just a suggestion) – Kristen Commented Feb 24, 2009 at 14:47
  • And a good suggestion at that. :) – Magnar Commented Feb 26, 2009 at 10:29
Add a comment  | 

5 Answers 5

Reset to default 13

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.

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.

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.

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"

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

发布评论

评论列表(0)

  1. 暂无评论