JavaScript中的作用域
作用域:代码起作用的范围
变量起作用的范围是变量作用域
1.块级作用域
任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。
函数作用域就好理解了 ,定义在函数中的参数和变量在函数外部是不可见的。
javascript中没有块级作用域。
在C语言等语言中有块级作用域
/C语言
#include <stdio.h>
void main()
{
int i=2;
i--;
if(i)
{
int j=3;
}
printf("%d/n",j);
}
运行这段代码,会出现“use an undefined variable:j”的错误。可以看到,C语言拥有块级作用域,因为j是在if的语句块中定义的,因此,它在块外是无法访问的。
而在JS中没有块级作用域
//如果有块级作用域下面的代码的显示结果为 undefined undefined
for(var i=0; i<10;i++){
var num = i;
}
console.log(i);
console.log(num);
2.词法作用域
就是在代码写好的那一刻,变量的作用域就已经确定了,这种作用域,就是所谓的词法作用域
和词法作用域相对的叫动态作用域 js中是词法作用域不是动态作用域。
function f2(){
var a = 456;
function f1(){
console.log(a);
}
}
f2();
在JavaScript中唯一能产生作用域的东西是 函数!
4.词法作用域的规则
函数允许访问函数外的数据.
整个代码结构中只有函数可以限定作用域.
作用域规则首先使用提升规则分析
如果当前作用域中有了该变量, 就不考虑外面的同名变量