yfisaboy 2019-11-07
JavaScript中存储数据值的容器称为变量。根据变量作用域可将变量分为和。
拥有全局作用域,在JavaScript代码中任何地方都有定义的变量,称为全局变量。通过var声明在函数外部的变量为全局变量。JavaScript全局变量是全局对象的属性,这是ECMAScript规范中强制规定的。在Web浏览器中,全局作用域对象为window。
定义全局变量的方法:
方法1:任何函数体外直接声明var声明变量
//方法1:任何函数体外直接声明var声明变量 var a = 10; var b;
方法2:直接添加属性到全局对象上。
//方法2:直接添加属性到全局对象上。在 Web 浏览器中,全局作用域对象为 window。 window.f = "function";
方法3:直接使用未经声明的变量,以这种方式定义的全局变量被称为隐式的全局变量。
//方法3:直接使用未经声明的变量,以这种方式定义的全局变量被称为隐式的全局变量。 c = "golbal";
作用域仅在局部代码块的变量,称为局部变量。在函数内部声明的变量只在函数体内有定义,它们是局部变量。局部变量在函数体外是不可见的,在作用域外引用会抛出引用错误(ReferenceError)异常。
function f(){ var number=10; } console.log(number);//=>Uncaught ReferenceError: number is not defined
在函数体内,局部变量的优先级高于全局变量。如果在函数内声明的一个局部变量或者函数参数中带有的变量和全局变量重名,那么全局变量就被局部变量所遮盖。这种情况时由于JavaScript作用域链导致的。
var a="global"; function f(){ var a="local"; console.log(a); } f();//=>打印"local"
参考资料:
《JavaScript权威指南》变量作用域_P56