1. 声明变量
//此代码块的执行环境为全局环境
if(true) {
var color = "blue";
}
console.log(color); //"blue"
//此代码块的执行环境为全局环境
for(var i = 0; i < 10 ; i++) {
doSomething(i);
}
console.log(i); //10
function add(num1,num2) {
//此代码的执行环境为add函数的内部环境
var sum = num1 + num2; //若省略var关键字则该变量会被添加到全局作用域,外部可访问到 (不推荐使用)
return sum;
}
var result = add(10,20); //30
console.log(sum); //报错,此变量无效
function print() {
for (var i = 0; i < 10; i++) {
//此处代码执行环境为print内部环境
doSomething(i);
}
console.log(i); //10,i被保存在当前执行环境下,即函数内部环境
}
print(); //10
console.log(i); //报错
在C、C++或Java中,color会在if语句执行完毕后被销毁,但在JavaScript中,if语句中的变量声明会将变量添加导当前的执行环境,上述前两个例子为全局环境。
2.查询标识符
var color = "blue";
function getColor() {
return color;
}
console.log(getColor()); //"blue"
var color = "blue";
function getColor() {
var color = "red";
return color;
}
console.log(getColor()); //"red"
在当前局部环境搜索不到的变量对象将会逐级向上层作用域查找,查找到即停止,否则报错(若局部环境中存在着同名标识符则不会使用位于父环境中的标识符)。