js作用域

概念

作用域是当前执行的上下文,值和表达式在其中可见或可被访问。如果一个变量或表达式不在当前的作用域中,那么它是不可用的。作用域也可以堆叠成层次结构,子作用域可以访问父作用域,反过来则不行。

JavaScript的作用域分三种

  • 全局作用域:脚本运行所有代码的默认作用域
  • 模块作用域:模块中运行代码的作用域
  • 函数作用域:由函数创建的作用域

此外,用let或const声明的变量属于额外作用域:

  • 块级作用域:用一个花括号(一个代码块)创建出来的作用域

由于函数会创建作用域,因而在函数中定义的变量无法从该函数的外部访问,也无法从其他函数的内部访问,例如:

function exampleFunction() {
  const x = "declared inside function"; // x 只能在 exampleFunction 函数中使用
  console.log("Inside function");
  console.log(x);
}

console.log(x); // 报错

 但是,下面的代码是有效的,因为变量在函数外被声明,为全局变量:

const x = "declared outside function";

exampleFunction();

function exampleFunction() {
  console.log("Inside function");
  console.log(x);
}

console.log("Outside function");
console.log(x);

块级作用域只对 let 和 const 声明有效,对 var 声明无效。

{
  var x = 1;
}
console.log(x); // 1
{
  const x = 1;
}
console.log(x); // ReferenceError: x is not defined

你可能感兴趣的:(javascript,javascript)