[英]Variable scope in Javascript for loop
有什么区别:
function bar()
{
for (x=0; x< 100; x++) {}
}
和
function bar()
{
var x;
for (x=0; x< 100; x++) {}
}
如果x没有在该函数之外声明,那么它不是全局变量? 我总是这么想,因为我通常不会声明仅在循环中使用的一次性变量,但我想知道这是否会破坏浏览器中的可比性等。
第一个例子将添加或修改全局变量x,如果不是所需的结果,通常要避免这种情况。
虽然你的第二个例子是按照需要工作的(没有副作用),但在我看来,这个替代方案看起来会更好
function bar()
{
for (var x=0; x< 100; x++) {}
}
在声明/使用变量时会创建变量。 如果省略var关键字,则在全局范围内自动创建变量。 所以你会产生副作用。 通常要避免这种情况。
假设您使用全局变量,然后您选择了该软件的其他部分已经采用的变量名称。 这将导致一些代码覆盖其值的情况。 这会产生错误,并且大部分时间都难以调试。 在您的示例中,您可能会覆盖另一个软件正在使用的全局变量x。
使用var也更快。 如果访问全局变量,则必须扫描所有范围,直到变量名称的全局范围。 通过使用var,它绑定到您的本地范围。
最好使用always use var。 或者更好:为变量选择最窄的范围总是好的。 现在你有全局和var。 无论您在何处声明,都可以在整个函数中看到var声明。 在javascript 1.7中引入了新关键字:let。 让我们进一步缩小范围。 如果你声明你的for循环
for(let x = 0; x < 100; i++) {}
比x仅在{}块内可见。
永远记住,在JavaScript中,范围是由函数定义的。 在示例中
function () {
var x = 15;
bar();
function bar() {
for (x=0; x< 100; x++) {}
}
//here x will be 100
}
您可能会意外访问更高的范围。 更高范围的意思是包装函数或window.x(如果没有更多的包装函数)。 如果你只想在你的循环中使用x,那么坚持第二个例子要好得多。
function () {
var x = 15;
bar();
function bar() {
var x;
for (x=0; x< 100; x++) {}
}
//here x will be 15
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.