theme: smartblue
什么是作用域
JavaScript中的作用域 ,是指变量、函数或者对象的作用范围。简单来说,就是指某个变量、函数或者对象在一个特定的执行环境中可以被访问,但一旦超出这个执行环境就无法被访问。
<script>
function test() {
var a = 1;
console.log(a); // 1
}
test();
console.log(a); // a is not defined
</script>
作用域的分类
JavaScript中的作用域可以根据执行环境的不同可以分为以下两种:
- 全局作用域
- 局部作用域
ECMASCript6新增了块级作用域。
全局作用域
在全局作用域定义的变量、函数或者对象在任意位置都可以访问;全局作用域在页面打开时创建,在页面关闭时销毁。
直接编写早script标签中的代码,都在全局作用域:
如下面定义的变量a、b,函数c都是全局作用域下
<script>
var a = 2;
var b = 3;
function c() {
console.log("作用域");
}
</script>
全局作用域中有一个全局对象window,它代表浏览器窗口,可以直接使用:
<script>
console.log(window); // Window {window: Window, ...}
</script>
在全局作用域中,创建的变量都会作为window的属性保存,创建的方法也会被挂载到window上:
<script>
var a = 2;
var b = 3;
function c() {
console.log("作用域");
}
console.log(window.a); // 2
console.log(window.b); //3
console.log(window.c); //Function
</script>
注意,es6中引入了const和let,如果使用const和let声明变量,在全局作用域中,它们将不在被作为全局变量使用。
<script>
const a = 2;
let b = 3;
console.log(window.a); // undefined
console.log(window.b); // undefined
</script>
局部作用域
在函数内部或者代码块的内部定义的变量、函数或者对象只能在当前函数内部或者代码块的内部访问。
function func () {
var v = 100; // 定义局部变量
console.log(v) // 访问局部变量
}
func()
console.log(v) // 在函数体外访问局部变量。。抛出异常:v is not defined
function fun () {
console.log(v) // 在其他函数中访问局部变量。。抛出异常:v is not defined
}
fun()