返回
漫谈 JavaScript 中的作用域
见解分享
2023-12-20 07:35:48
在 JavaScript 中,作用域是指在变量声明的代码段之外是不可见的。我们可以将 JavaScript 作用域分为三种类型:函数作用域、块级作用域和词法作用域。
函数作用域
函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,可以在整个函数的范围内使用及复用。
例如,我们有以下代码:
function sayHello() {
var message = "Hello, world!";
console.log(message);
}
sayHello(); // 输出: Hello, world!
在这个例子中,变量 message
在函数 sayHello
中声明,因此它在函数体内是可见的。当我们调用函数 sayHello
时,变量 message
的值被输出到控制台。
块级作用域
块级作用域是指在变量声明的代码段之外是不可见的。块级作用域是由 ES6 中引入的 let
和 const
实现的。
例如,我们有以下代码:
if (true) {
let message = "Hello, world!";
console.log(message); // 输出: Hello, world!
}
console.log(message); // 报错: ReferenceError: message is not defined
在这个例子中,变量 message
在 if
语句块中声明,因此它在 if
语句块内是可见的。当我们执行 if
语句块时,变量 message
的值被输出到控制台。但是,当我们尝试在 if
语句块之外访问变量 message
时,我们会得到一个错误,因为 message
在 if
语句块之外是不可见的。
词法作用域
词法作用域是指一个函数可以访问其父函数的作用域中的变量。
例如,我们有以下代码:
function outer() {
var message = "Hello, world!";
function inner() {
console.log(message); // 输出: Hello, world!
}
inner();
}
outer();
在这个例子中,函数 inner
可以访问其父函数 outer
中的变量 message
。当我们调用函数 outer
时,函数 inner
也被调用,并且变量 message
的值被输出到控制台。
总结
函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。块级作用域是指在变量声明的代码段之外是不可见的。词法作用域是指一个函数可以访问其父函数的作用域中的变量。