繁体   English   中英

为什么这个函数中的变量是全局的?

[英]Why is the variable inside this function global?

我认为函数中定义的任何变量都是本地的,但我可以轻松访问其函数之外的变量'e'。

function change() {
 var d = 6; 
  e = 7;
}

change();
alert(e); //> alerts 7

因为默认情况下新变量将进入全局范围。 var通过将变量的存在限制在当前范围内来防止这种情况发生。

因为它是在没有var声明的情况下变成全局window对象的一部分。

你没有明确地声明它,所以它占据了全球范围。

那是因为默认情况下e是全局的,使用var使范围变量。 您可以在Javascript Garden Scope和Namespaces中阅读有关此内容的更多信息

我猜你正在接受这种假设

JSLint期望var只声明一次,并且它将在使用之前声明。

代码问题是你使用的是一个var,但你的第二行在它前面没有var。 这就是将可变e推入全局命名空间。

为什么会这样? 您在变量声明中使用了分号而不是逗号。

function change() {
 var d = 6, //Change this to a comma 
     e = 7;
}

change();
alert(e); //will produce an error now

创建全局变量非常容易,这里是我见过的其他一些问题。

// :-( antipattern: implied global variable
function sum(x, y) {
    result = x + y; // result is global
    return result;
}

// :-) better
function sum(x, y) {
    var result = x + y; // result is local
    return result;
}

// :-( antipattern: chain assignments as part of a var declaration
function foo() {
    var a = b = 0; // b is global
}

// :-) better
function foo() {
    var a, b;
    a = b = 0; // both local
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM