在 JavaScript 中,作用域是一个非常重要的概念。它定义了变量、函数和对象的可访问性。理解作用域有助于编写更高效、更安全的代码。
在 JavaScript 中,有两种类型的作用域:
- 局部作用域(或函数作用域)
- 全局作用域
1. 局部作用域(或函数作用域)
在函数内部声明的变量具有局部作用域。这些变量只能在其声明的函数内部访问。当函数执行完毕后,这些变量会被销毁。
javascriptfunction myFunction() { var localVariable = "I am local!"; // 局部变量 console.log(localVariable); // 在函数内部可以访问局部变量 } myFunction(); // 输出 "I am local!" console.log(localVariable); // ReferenceError: localVariable is not defined
2. 全局作用域
在函数外部声明的变量具有全局作用域。这些变量可以在代码中的任何位置访问。
javascriptvar globalVariable = "I am global!"; // 全局变量 function myFunction() { console.log(globalVariable); // 在函数内部可以访问全局变量 } myFunction(); // 输出 "I am global!"
注意: 在严格模式('use strict')下,全局作用域的变量必须使用 var
、let
或 const
声明,否则会抛出错误。
3. 块级作用域(使用 let
和 const
)
从 ES6 开始,JavaScript 引入了块级作用域的概念。块级作用域由一对花括号 {}
定义。使用 let
和 const
声明的变量具有块级作用域。这些变量只在声明它们的块或任何包含块中可见。
javascriptlet blockVariable = "I am block-scoped!"; // 块级变量 if (true) { console.log(blockVariable); // 在块内可以访问块级变量 } else { console.log(blockVariable); // ReferenceError: blockVariable is not defined }
4. 立即执行函数表达式(IIFE)
立即执行函数表达式是一种创建局部作用域的常见方法。这种函数会在声明后立即执行。
javascript(function() { var privateVariable = "I am private!"; // 局部变量,只能在函数内部访问 console.log(privateVariable); // 在函数内部可以访问局部变量 })(); // 立即执行函数表达式 console.log(privateVariable); // ReferenceError: privateVariable is not defined