乐闻世界logo
搜索文章和话题

JS 中变量的范围是什么

4个答案

1
2
3
4

在JavaScript中,变量的作用域决定了在代码的哪些部分可以访问该变量。作用域可以是全局的或者局部的。

  1. 全局作用域: 当一个变量在函数之外被声明时,它拥有全局作用域。这意味着它可以在代码的任何地方被访问和修改。全局变量在整个web页面的生命周期内都是可用的。

    例如:

    javascript
    var globalVar = "这是一个全局变量"; function demoFunction() { console.log(globalVar); // 可以访问全局变量 } demoFunction(); // 输出: 这是一个全局变量

    上面的 globalVar 就是一个全局变量,它可以在 demoFunction 函数内部被访问。

  2. 局部作用域: 当一个变量在函数内部被声明时,它拥有局部作用域,也就是说它只能在该函数内部被访问和修改。局部变量对于函数外部的代码来说是隐藏的。

    例如:

    javascript
    function demoFunction() { var localVar = "这是一个局部变量"; console.log(localVar); // 可以访问局部变量 } demoFunction(); // 输出: 这是一个局部变量 // console.log(localVar); // 错误:localVar 在这里是不可访问的

    localVar 只能在 demoFunction 函数内部被访问。

另外,JavaScript ES6 引入了两个新的关键字 letconst 来声明变量,它们提供了块级作用域(block scope)。

  1. 块级作用域: 使用 letconst 声明的变量具有块级作用域。它们只能在包含它们的代码块(如一个for循环或者if语句)内部被访问。

    例如:

    javascript
    if (true) { let blockScopedVar = "这是一个块级作用域的变量"; console.log(blockScopedVar); // 可以访问块级作用域的变量 } // console.log(blockScopedVar); // 错误:blockScopedVar 在这里是不可访问的

在开发实际应用时,通常建议尽可能使用局部作用域或块级作用域来声明变量,以避免全局变量可能带来的命名冲突和难以追踪的bug。

2024年6月29日 12:07 回复

Javascript 使用作用域链来建立给定函数的作用域。通常有一个全局作用域,并且定义的每个函数都有其自己的嵌套作用域。在另一个函数中定义的任何函数都具有链接到外部函数的局部作用域。定义范围的始终是源代码中的位置。

作用域链中的元素基本上是一个带有指向其父作用域的指针的 Map。

解析变量时,JavaScript 从最内层范围开始向外搜索。

2024年6月29日 12:07 回复

全局声明的变量具有全局作用域。函数内声明的变量的作用域为该函数,以及同名的影子全局变量。

(我确信真正的 JavaScript 程序员能够在其他答案中指出许多微妙之处。特别是我遇到了这个页面,了解this任何时候的确切含义。希望这个更具介绍性的链接足以让您入门.)

2024年6月29日 12:07 回复

这是一个例子:

shell
<script> var globalVariable = 7; //==window.globalVariable function aGlobal( param ) { //==window.aGlobal(); //param is only accessible in this function var scopedToFunction = { //can't be accessed outside of this function nested : 3 //accessible by: scopedToFunction.nested }; anotherGlobal = { //global because there's no `var` }; } </script>

您将需要研究闭包,以及如何使用它们来创建私有成员

2024年6月29日 12:07 回复

你的答案