王益达
楼上 @onemoo 关于作用域概念的解释完全适用 JS,作用域可以指变量,也可以指函数。这里只做个扩展补充:在 C 语言中,在变量声明的代码块之外是不可见的,通常称为块级作用域。例如:#include
void main()
{
int i = 1;
i--;
if(i == 0)
{
int j = 1;
}
printf("%d", j);
}其中,变量 j 定义在 if 代码块中,外部无法访问。而 JavaScript 中,变量的作用域只有全局作用域和函数作用域,没有 if 、for、while 块级约束,外部可访问,例如:(function () {
var i == 1;
i--;
if(i == 0)
{
var j = 1;
}
console.log(j);
})();
console.log(j);其中,变量 j 在 if 代码块外可以访问,而在 function 代码块外不可访问。当然,在 ES6 开始,新增了 let 声明变量的方式,用法类似于 var,但是所声明的变量只在 let 所在的代码块内有效。let 实际上为 JavaScript 新增了块级作用域。例如:{
let i = 1;
i--;
if(i == 0)
{
let j = 1;
}
console.log(j);
};
console.log(i);其中,变量 i 和 变量 j 都不可被访问。