常见的作用域为:
全局作用域:脚本模式运行所有代码的默认作用域
函数作用域:由函数创建的作用域
局部作用域:用对象{}包着(一个代码块)创建出来的作用域
在
-
全局变量
1、在全局作用域下声明的变量叫做 全局变量(在函数外部定义的变量)2、全局变量在全局(代码的任何位置)下都可以使用;全局作用域中无法访问到局部作用域中的变量。
以下我们用var创建的就是全局变量:
<script>
var value = 66;function method(){console.log(value);}
method();
console.log(value);
</script>
全局变量会提升但并不会赋值:所以 在创建之前log是undefined 的亿点小知识:变量提升和上文提到触发时间有关。我们知道,var 和 function 声明的变量可以在声明前访问,这就是因为变量提升的缘故。
<script>console.log(value); // undefined var value = 66;console.log(value); // 66
</script>
-
局部变量
1、在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)2、局部变量只能在函数内部使用,在局部作用域中可以访问到全局变量。
在函数的内部创建变量也是局部变量:
<script>function method(){var value = 66;console.log(value); // 66}
method();
console.log(value); //value is not defined
</script>
- 全局作用域
全局作用域中的变量称为全局变量,可以在任何作用域内访问。有两种全局变量:
1.全局声明变量是普通变量,在最顶级由 const、let 和 class 声明的变量。
2.全局对象是存储在全局对象中的属性亿点小知识:所有创建的变量都会作为 window 对象的属性保存
<script>
var value = 66; // 在整个全局都可以获取到 valuefunction method(){console.log(value); // 全局方法内部也可以获取到 value }
method();
</script>
- 局部作用域
作用域对变量来说,可以简单理解为程序能够访问到变量的范围,超过作用域的就无法访问。
{ // 外面这个 a 作用域,可以访问变量 aconst a = 0; console.log(a); // 0{// 里面这个 b 作用域,可以访问 a、bconst b = 1;console.log(a); // 0console.log(b); // 1}
}
// 最外面的作用域 不能访问 a,b
console.log(a); // 报错:Uncaught ReferenceError: a is not defined
- 函数作用域
在函数内部定义的变量,就是局部作用域。函数作用域内,对外是封闭的,从外层的作用域无法直接访问函数内部的作用域
function method(){let value = '内容';
}
console.log(value ) //报错:ReferenceError:value is not defined