JavaScript变量问题的澄清
Clarification of a JavaScript variable issue
我从1996年开始编写JavaScript,有一个非常简单的问题,我无法使用jsfiddle 清楚地证明/反驳
在简历附带的一些JS中,我发现了一些我想核实的问题,其中之一是同一函数中变量的多次声明
测试它似乎是允许在较新的浏览器中使用的(OSX Chrome16 Fx 10beta)-据我记忆所及,它曾出现错误(Netscape/Mozilla/Fx1/IE5左右):
function something() {
var var1 = "";
.
/* reams of code which scrolls the first declaration off the screen
so the author likely forgot the var was already declared earlier
in the same function */
.
var var1 = ""; // could this result in an error in some browsers?
}
我的小提琴在这里
据我所知,至少6年来,我见过带有多个for循环的javascript函数,每个循环都声明自己的var i
,所有这些都没有问题。
看过规范后,这方面似乎没有什么具体的内容,但由于(特别是全局)变量名覆盖(读作:冲突)从一开始就是一个功能,如果对多个声明施加限制,我会感到非常惊讶。
目前,我认为它在javascript中的作用域(和提升)方面并没有表现出特别好的知识,但仍然是有效的代码。
我玩javascript的时间和你一样长,我不记得这是被解释器禁止的。查看ECMAScript 1规范,我看不到任何关于确保变量声明在给定范围内唯一的内容;这将是一个奇怪的特征删除。
缺少这样的检查,再加上变量是函数范围的,而不是块范围的,这似乎是造成误解的原因之一,其中一个块中"声明"的变量意外地具有上一个块的最后一个值。
我很确定解析器会忽略第二个"var"-声明,因为它是多余的-它所做的只是表示变量仅限于本地范围。没有理由在同一范围内使用它两次,就像在同一函数中一样,但如果你像@rich.okelly指出的那样有循环或函数,你确实可以使用"var"来创建一个与更高范围内的变量同名的局部变量。它并不漂亮,当然也不会对可读性产生任何奇迹,但这是可能的。我从来没有遇到过一个浏览器在用"var"开头两次变量时挂断的情况。
示例:
x = "Hello";
function test() {
alert(x); // Outputs "Hello"
}
function test2() {
var x = "local variable";
alert(x); // ouputs "local variable"
var x = "changed the variable"; // this does exactly the same thing as if you'd omitted "var"
}
alert(x); // Outputs "Hello"
- 将PHP变量传递给jQuery时遇到问题
- 参数变量出现ngTable指令问题
- 为变量分配多个nodejs导出返回值时出现问题
- 如何处理流星变量&对miniMongo有问题
- Jquery变量类型问题
- 带有.css()串联问题的jQuery变量
- JavaScript变量引用数组时出现问题
- 将一个php变量从js传递到php,并返回内容问题
- 简单的变量问题
- 可以't在quizz页面范围问题上用最终分数更新变量
- array_push平面数组问题-需要能够向数组中添加多个变量
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- Javascript函数变量传递语法问题
- 访问带有变量的Object元素时出现问题
- 将 Ajax 数据分配给全局变量时出现问题
- JavaScript/jQuery中的基本数学问题-变量记忆值
- 简单的jQuery变量问题-变量冲突
- Javascript作用域问题:变量未被识别
- Javascript作用域问题-变量未定义
- 目标转换问题-变量修改