作用域scope
一个变量的作用域是程序源代码中定义这个变量的区域。全局变量拥有全局作用域,在js代码中的任何地方都是有定义的。然而在函数内声明的变量只在函数体内有定义。
他们是局部变量,作用域是局部性的。函数参数也是局部变量,他们只在函数体内有定义。
在函数体内,局部变量的优先级高于同名的全局变量。如果在函数内声明的一个局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就被局部变量所遮盖。
var scope = "global"; // 声明一个全局变量
function checkscope(){
var scope = "local"; //声明一个同名的局部变量
return scope; //返回局部变量的值,而不是全局变量的值
}
checkscope(); // "local"
尽管在全局作用域编写代码时可以不写var语句,但声明局部变量时则必须使用var语句。
如果不这样做会怎样?
scope = "global"; //声明一个全局变量,甚至不用var来声明
function checkscope2(){
scope ="local"; //修改了全局变量!!!
myscope = "local"; //显式的声明了一个新的全局变量
return [scope,myscope]; //返回两个值
}
checkscope2(); //["local" , "local"]:产生了副作用
scope // "local":全局变量修改了
myscope // "local":全局命名空间搞乱了
函数定义是可以嵌套的。由于每个函数都有他自己的作用域,因此会出现几个局部作用域嵌套的情况。
例如:
var scope = "global scope"; // 全局变量
function checkscope3(){
var scope = "local scope"; //局部变量
function nested(){
var scope = "nested scope"; //嵌套作用域内的局部变量
return scope; //返回当前作用域内的值
}
return nested();
}
checkscope3(); // "nesed scope" 嵌套作用域
scope //"global scope"
网友评论