一个变量的作用域(scope)的程序源代码中定义这个变量得的区域。全局变量拥有全局作用域,在Javascript代码中的任何地方多是有定义的。
然而在函数内声明的变量只在函数体内有定义。它们是局部变量,作用域是局部性的。函数参数也是局部变量,它们函数体内有定义。
在函数体内,局部变量的优先级高于同名的全局变量。如果在函数内声明的一个局部变量或者函数参数中带有的变量和全局变量,那么全局变量就被
局部变量所遮盖。
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 checkscope(){ var scope="local scope"; //局部变量 function nested(){ var scope="nested scope"; //嵌套作用域内的局部变量 return scope; //返回当前作用域内的值 } return nested(); } checkscope(); //嵌套作用域