Javascript变量的完全解析
变量范围是在程序中定义变量的区域。先看一个例子:
/代码1
var范围;
功能checkscope(){
var范围;
功能childcheck(){
VAR范围=childlocal ;
document.write(范围);
}
功能像一个孩子那样(){
document.write(范围);
变量范围;
}
功能childoverride(){
范围=childoverride ;
document.write(范围);
}
document.write(范围); / /输出地方
ChildCheck(childlocal); / /输出
像一个孩子那样(不确定); / /输出
childoverride(childoverride); / /输出
document.write(范围); / /输出childoverride
}
(checkscope); / /地方childlocal undefinedchildoverride childoverride输出
document.write(范围); / /输出全球
全局范围和本地范围
全局变量(全局变量)的范围是全局的,并且在Javascript中处处定义;函数内部声明的变量是局部(局部)变量,其范围是局部的,只在函数体中定义。
/代码2
var范围;
功能checkscope(){
var范围;
document.write(范围);
}
CheckScope(局部); / /输出
document.write(范围); / /输出全球
全局变量中的变量可以使用无var语句,但在声明本地变量时,必须使用var语句。否则,它们将被视为对全局变量的引用:
/代码3
var范围;
功能checkscope(){
范围;
document.write(范围);
}
CheckScope(局部); / /输出
document.write(范围); / /输出地方
没有一块范围
Javascript没有块级范围,函数中声明的变量在整个函数中定义:
/代码4
var范围;
功能checkscope(){
document.write(范围); / /声明4.1
var范围=本地;语句4.2
document.write(范围);
}
CheckScope(undefinedlocal); / /输出
4.1报表(VAR范围=地方;)是有效的在整个的checkscope函数变量的作用域,因此在表4.2(document.write(范围);)当执行范围指的是局部变量,局部变量的范围不明确,所以未定义的输出。所以一个好的编程习惯是集中所有的变量声明在函数的开始。
在知道上面的内容之后,读者不应该再看代码1了。
对象的属性变量
对象的属性变量更容易理解,下面的代码读者不应混淆。
/代码5
var范围;
var obj =新的对象();
obj.scope =对象;
obj.checkscope =函数(){
VAR范围=本地;
document.write(范围); / /输出本地
(这段范围); / /输出对象
document.write(窗口。范围); / /输出全球
}
Obj.checkScope(对象); / /输出局部全局
所谓范围是代码块中变量的有效范围。如果您不理解Javascript范围,那么调试代码可能很困难。
在函数中,如果var用于声明变量,则变量的范围仅限于函数本身。函数外部的代码不能访问变量。如果函数在函数中声明,内部函数也可以访问变量。
反过来,如果声明变量时没有使用var,则变量的范围不限于函数。Javascript引擎将检查变量是否在全局范围内定义。如果未定义变量,则它将被定义为一个全局变量。
函数可以访问同一范围内的变量:
VaR foo =你好;
VaR方法sayHello =函数(){()
console.log(Foo);
};
SayHello(原木); / /你好
console.log(Foo); / /也logs'hello
变量范围以外的代码无法访问变量:
VaR方法sayHello =函数(){()
VaR foo =你好;
console.log(Foo);
};
SayHello(原木); / /你好
console.log(Foo); / /不记录任何
在一个域的使用中,同一个变量有不同的值:
变量foo =世界;
VaR方法sayHello =函数(){()
VaR foo =你好;
console.log(Foo);
};
SayHello(原木); / /你好
console.log(Foo); / / logs'world
函数固定后,您可以看到函数中变量值的变化:
var =函数MyFunction(){()
VaR foo =你好;
无功myfn =函数(){()
console.log(Foo);
};
foo =世界;
返回myfn;
};
var = myFunction();
F(日志); / /世界哈哈
行动的范围也跨越-关闭
自实现以来的匿名函数
(函数(){())
var巴兹= 1;
VaR BIM =函数(){ alert(Baz);};
酒吧=函数(){ alert(Baz)};};
});
console.log(Baz);在外面 / /巴兹函数不能访问
(bar);当bar不使用var语句时
bar是一个全局变量;但是,
/ /酒吧和Baz在同一个域定义,
/ /所以酒吧可以访问Baz
bar实际上是一个闭包函数。
(BIM),
这里不能调用
综合的
所谓范围是代码块中变量的有效范围。如果您不理解Javascript范围,那么调试代码可能很困难。
在函数中,如果var用于声明变量,则变量的范围仅限于函数本身。函数外部的代码不能访问变量。如果函数在函数中声明,内部函数也可以访问变量。
反过来,如果声明变量时没有使用var,则变量的范围不限于函数。Javascript引擎将检查变量是否在全局范围内定义。如果未定义变量,则它将被定义为一个全局变量。
函数可以访问同一范围内的变量:
VaR foo =你好;
VaR方法sayHello =函数(){()
console.log(Foo);
};
SayHello(原木); / /你好
console.log(Foo); / /也logs'hello
变量范围以外的代码无法访问变量:
VaR方法sayHello =函数(){()
VaR foo =你好;
console.log(Foo);
};
SayHello(原木); / /你好
console.log(Foo); / /不记录任何
在一个域的使用中,同一个变量有不同的值:
变量foo =世界;
VaR方法sayHello =函数(){()
VaR foo =你好;
console.log(Foo);
};
SayHello(原木); / /你好
console.log(Foo); / / logs'world
函数固定后,您可以看到函数中变量值的变化:
var =函数MyFunction(){()
VaR foo =你好;
无功myfn =函数(){()
console.log(Foo);
};
foo =世界;
返回myfn;
};
var = myFunction();
F(日志); / /世界哈哈
行动的范围也跨越-关闭
自实现以来的匿名函数
(函数(){())
var巴兹= 1;
VaR BIM =函数(){ alert(Baz);};
酒吧=函数(){ alert(Baz)};};
});
console.log(Baz);在外面 / /巴兹函数不能访问
(bar);当bar不使用var语句时
bar是一个全局变量;但是,
/ /酒吧和Baz在同一个域定义,
/ /所以酒吧可以访问Baz
bar实际上是一个闭包函数。
(BIM),
这里不能调用