📜  变量 x=21; var myFunction = function(){ console.log(x);变量 x= 20; };我的函数(); - Javascript(1)

📅  最后修改于: 2023-12-03 14:50:37.048000             🧑  作者: Mango

变量和函数的作用域

在 JavaScript 中,变量和函数的作用域是非常重要的概念。作用域决定了代码中哪些变量和函数可以被访问。

变量的作用域

在 JavaScript 中,变量的作用域可以分为全局作用域和函数作用域。

全局作用域

在全局作用域中定义的变量可以在任何地方访问,包括函数内部和外部。例如,在下面的代码中定义了一个全局变量 x:

变量 x = 21;
函数作用域

在函数作用域中定义的变量只能在函数内部访问。例如,在下面的代码中定义了一个函数内部变量 x:

函数 myFunction() {
  变量 x = 20;
  console.log(x);
}

x 变量只能在 myFunction 函数内部访问。

注意,在函数中可以访问全局变量。例如,在下面的代码中,myFunction 函数可以访问全局变量 x:

变量 x = 21;

函数 myFunction() {
  console.log(x);
}

myFunction(); // 输出 21
函数的作用域

与变量作用域类似,函数的作用域可以分为全局作用域和函数作用域。

全局作用域

像变量作用域一样,在全局作用域中定义的函数可以在任何地方访问,包括其他函数内部和外部。例如,在下面的代码中定义了一个全局函数 myFunction:

函数 myFunction() {
  console.log("Hello, world!");
}
函数作用域

在函数作用域中定义的函数只能在该函数内部访问。例如,在下面的代码中定义了一个函数内部函数 myInnerFunction:

函数 myFunction() {
  函数 myInnerFunction() {
    console.log("Hello, world!");
  }
  
  myInnerFunction();
}

myFunction(); // 输出 Hello, world!
变量作用域的优先级

当在函数中定义一个与全局变量同名的变量时,函数中的变量会优先于全局变量被访问。例如,在下面的代码中,函数内部的 x 变量覆盖了全局变量 x:

变量 x = 21;

函数 myFunction() {
  变量 x = 20;
  console.log(x);
}

myFunction(); // 输出 20
代码片段

下面的代码片段演示了在函数中访问全局变量和函数内部变量的方式:

变量 x = 21;

函数 myFunction() {
  console.log(x);
  变量 x = 20;
}

myFunction(); // 输出 21

函数内部先访问了全局变量 x(输出 21),然后定义了一个新的 x 变量并赋值为 20。但由于函数作用域的限制,这个新的 x 变量只在函数内部可见,函数外部的全局变量 x 仍然保持不变。