通常来说在JavaScript代码中所用到的变量并不总是有效/可用的,而限定这个变量可用性的代码范围就是这个变量的作用域。作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。
全局变量拥有全局作用域,可以在JavaScript代码的任何地方访问到,只要变量不是在函数内部定义的都是全局变量。
列子如下:
interim()
var number = 0;//声明一个全局变量
function scope() {
console.log(number);//打印0说明可以访问到
}
function interim(){
console.log(number);//打印0说明可以访问到
}
scope();
interim();
那么在函数内部定义的变量就是局部变量,它只能在当前函数的内部访问或者说是使用。函数的参数也是局部变量他们只能在当前函数的内部访问。
列子如下:
function interim() {
var string = "string2";
}
interim();
console.log(string);//浏览器会报错因为全局没有这个变量。在函数内部的变量在全局是没法访问的
在函数内部的局部变量要优先于全局变量。如果在函数内部声明的变量或者函数的参数与函数外部声明的变量同名的话,哪么在该函数的内部是访问不到函数外部变量的,只能访问到该函数内部自己的局部变量。
代码如下:
var number=1;
function scope(){
var number=2;
console.log(number); //打印结果是2因为函数内部有声明number变量
}
scope();
因为函数是可以嵌套的(就是函数内部再声明函数)每个函数又都有自己的作用域所以会出现局部作用域嵌套的情况,列如下面的代码:
var string="string1";
function interim(){
var string="string2";
(function(){
//这个函数是匿名函数自调用
var string="string3";
console.log(string); //打印结果是string3只要当前函数内部有声明这个变量就会访问自己的变量不会访问外部的。
})()
}
interim()
在上面代码中的情况下,我们在使用变量的时候会先在当前函数内查找这个变量的声明(var)如果当前函数有声明(var)这个变量则直接使用,如果没有声明(var)这个变量就会往上一层作用域中查找。直至找到这个变量的声明。(这种情况被称做变量查找)
网友评论