为什么在使用它之前在Javascript中声明变量不是必须的?

时间:2009-02-24 13:15:46

标签: javascript variables

在Javascript中,我们不必在使用var关键字之前声明变量。我们可以立即执行myCount = 12;myStr = "Hello";之类的操作(之前未声明myCount,myStr)。任何此类用法,都声明并初始化“全局”范围内的变量。

提供此功能的原因是什么?它是一个很好的标准吗?

更新:我的问题不是'使用变量而不声明'和'声明然后使用'以及它如何影响范围之间的差异。

我的问题是'为什么javascript中允许直接使用变量而不声明它',因为大多数编程语言都严格检查。

更新:我看到以下引用文字是此功能的不良影响。那么,为什么要有这个功能?

“假设有一个全局声明的变量xvar x="comparison string"),我已经不知道了,我打算在我的一个函数中创建我自己的全局'x'初始化一个({ {1}})我最终打破了其他功能。

那么,有什么好的理由吗?有这个功能吗?

5 个答案:

答案 0 :(得分:13)

Javascript适用于浏览器中非常简单的脚本。要求变量声明似乎没必要。

当然,这是语言中的错误。而javascript的制造者知道这一点。他们想改变它。但他们不能。为什么呢?

因为微软已经反向设计了JavaScript并创建了他们的重复JScript,并且存在错误。微软否决了任何变更,甚至错误修正,因为他们坚持不破坏任何人的脚本。所以,即使他们改变了JavaScript,IE中的JScript也会保持不变。

这不是一个好理由。但它就是我们拥有的那个。

来源:我从道格拉斯·克罗克福德获得了我的javascript历史课:“JavaScript编程语言”,http://video.yahoo.com/watch/111593/1710507故事的这一部分是在视频的9到11分钟之间。

答案 1 :(得分:4)

有充分理由吗?老实说,不能想到一个,这是我真正不喜欢JS的少数事情之一。

这是可能的,因为如果没有其他控制,一切都在全局范围内发生,JS允许这样的隐式变量创建。这样做的成本是确定漏洞和污染的巨大潜力,并且只有在“明白”明确定义自我范围以及存在全局参考的“窗口”和“文档”的情况下才能获益,这样可以节省一些字符 - 这是没有理由的一点都不。

答案 2 :(得分:1)

  

我的问题是'为什么javascript中允许直接使用变量而不声明它',因为大多数编程语言都严格检查。

这是静态和动态类型语言之间的区别。 Javascript是动态类型的,因此无需先声明。正如在其他答案中指出的那样,var关键字对变量的范围比其声明更负责。

我不认为大多数编程语言都会对此进行检查。

答案 3 :(得分:1)

Lua有一个类似的问题:默认情况下,任何非声明的变量都是全局的。在邮件列表中,它是一个反复出现的主题,问为什么它不应该是“默认为本地”。不幸的是,这会在语言中引入非常讨厌的含糊之处,因此结论通常是“默认情况下全局不好,默认本地更糟”

答案 4 :(得分:0)

因为它是一种脚本语言。事实孩子。这就是它的设计方式!