作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突。
Javascript中没有块级作用域,“块级作用域”中声明的变量将被添加到当前的执行环境中
if(true){
varcolor="blue";
}
console.log(color);//"blue"
functiontest(){
if(true){
varcolor="blue";//(当前执行环境为函数test的局部作用域,函数外部无法访问,内部可以访问)
}
console.log("blue");//"blue"
functioninner(){
console.log(color);//"blue"
}
inner();
}
test();
console.log(color);//ReferenceError:colorisnotdefined
在JavaScript中,由for语句创建的变量,即使在for循环执行结束后,也依旧会存在于循环外部的执行环境中。
for(vari=0;i<10;i++){
varcolor="blue";
}
console.log(i);//10
console.log(color);//"blue"
使用var声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境就是函数的局部环境;在with语句中,最接近的环境是函数环境。
如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境。
functionadd(num1,num2){
varsum=num1+num2;//用var声明
returnsum;
}
console.log(add(10,20));//30
console.log(sum);//ReferenceError:sumisnotdefined
functionadd(num1,num2){
sum=num1+num2;//没有使用var声明
returnsum;
}
console.log(add(10,20));//30
console.log(sum);//30
如果局部环境中存在着同名标识符,就不会使用位于父环境中的标识符。
varcolor="blue";
functiongetColor(){
console.log(color);//undefined(变量提升)
varcolor="red";
console.log(color);//red
console.log(window.color);//blue
returncolor;
}
console.log('return:',getColor());//return:red
console.log(color);//blue
对于对象而言(其他也是一样的),在main函数中,对象的作用域为他所在的最近的一对花括号内。在后花括号处析构函数被调用;全局的对象的作用域为声明之后的整个文件,析构函数在最后被调用。另外,临时产生的对象在使用完后立即会被析构。
以上是酷仔今日整理的“Web前端基础教程:JavaScript中的var与作用域”一文,希望对正在学习Web前端基础或者对前端开发感兴趣的同学提供参考。