词法作用域指的是变量的作用域是在代码中定义时就确定的,而不是在运行时确定。JavaScript采用的是词法作用域,也就是静态作用域。
当在代码中执行变量引用时,JavaScript引擎会根据词法作用域(也就是代码中定义的位置)来决定该变量的值。
在JavaScript中,变量有两种:全局变量和局部变量。
全局变量:定义在函数或代码块外,可以从函数内或代码块内进行访问。
局部变量:定义在函数或代码块内,只能在函数内或代码块内进行访问。
var a = "global";
function test() {
var a = "local";
console.log(a);
}
test(); // 输出local
console.log(a); // 输出global
在上面的代码中,变量a在函数test中被定义为局部变量,它的作用域仅限于函数内。在函数外访问全局变量a时,输出global;在函数内访问局部变量a时,输出local。
var x = "global";
function test1() {
console.log(x);
}
function test2() {
var x = "local";
test1();
}
test2(); // 输出global
在上面的代码中,函数test2内定义了一个局部变量x,并且调用了函数test1,函数test1内并没有定义x这个变量,而是通过词法作用域查找到全局变量x,因此输出的是全局变量x的值global。
词法作用域是JavaScript中重要的概念,它决定了变量的作用域。当在代码中执行变量引用时,JavaScript引擎会根据词法作用域(也就是代码中定义的位置)来决定该变量的值。了解词法作用域的概念对于深入理解JavaScript的作用域和闭包等概念非常有帮助。