在 JavaScript 中,作用域是指变量和函数的可访问性。了解作用域的工作原理可以帮助我们更好地理解代码中发生的事情并避免一些常见的错误。
全局作用域
在 JavaScript 中,没有被声明为局部变量或函数参数的变量都属于全局作用域。这意味着它们可以在代码的任何地方被访问。
--- -------------- - ---- - ------ ---------- -------- ----- - ---------------------------- - ------ -- -- ---- - ------ ---------
在上面的例子中,变量 globalVariable
被声明在函数外部,因此它是一个全局变量。在 foo
函数内部,我们可以直接访问它并输出它的值。这是因为它是全局作用域中的一部分。
请注意,全局作用域中定义的变量可能会与局部作用域中的同名变量冲突。这种情况下,局部变量将覆盖全局变量。
函数作用域
在函数中声明的变量只能在该函数内部访问,这就是函数作用域。
-------- ------- - --- -------- - ---- - -------- -- ----- ---------- -------- ------- - --- -------- - ---- - -------- -- ----- ---------- ---------------------- ---------------------- - -------- - -------- -- -- ---- - -------- -- ----- --------- - ---- - -------- -- ----- ---------
在这个例子中,变量 outerVar
是外部函数 outer
的局部变量。它可以在内部函数 inner
中访问。同样的,变量 innerVar
是内部函数 inner
的局部变量,只能在该函数内部访问。
块级作用域
在 ES6 中引入了块级作用域,意味着通过使用关键字 let
和 const
声明的变量只能在声明它们的块级范围内访问。
-------- ----- - -- ------ - --- ------------- - ---- - ----- ---------- ----- ---------------- - ---- - -------- ----- ---------- --------------------------- ------------------------------ - --------------------------- -- ---------------- ---- ------------------------------ -- ------------------- ---- - ------
在上述例子中,变量 blockVariable
和 constantVariable
只能在 if
语句的块级范围内访问。当我们尝试在其它位置访问这些变量时,JavaScript 将抛出一个错误。
闭包
闭包是指嵌套函数可以访问其外部函数的变量。这意味着即使外部函数已经返回并且其内部变量已经被销毁,嵌套函数仍然可以访问这些变量。
-------- ------- - --- -------- - ---- - -------- -- ----- ---------- ------ -------- ------- - ---------------------- - - --- --------- - -------- ------------ -- -- ---- - -------- -- ----- ---------
在此示例中,outer
函数返回一个内部函数 inner
,它可以访问 outerVar
变量,即便 outer
函数已经返回并且 outerVar
变量已经出了作用域。通过闭包,我们可以在 JavaScript 中实现一些高级的编程技巧。
总结
了解 JavaScript 中的作用域原理对于编写高质量代码是至关重要的。全局作用域、函数
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/29597