// JS作用域就是变量在某个范围内其作用和效果。作用域的目的是为了提高程序的可靠性,更重要的是减少命名冲突。
// 1. JS作用域(ES6之前):全局作用域,局部作用域
// 2. 全局作用域:整个script标签,或者是一个单独的JS文件
// 3. 局部作用域:在函数内部就是局部作用域,某个变量只能在这个函数内部存在
function fn() {
// 局部作用域
}
根据作用域的不同,变量可以分为两种:
- 全局变量
- 局部变量
// 根据作用域的不同,变量可以分为两种:
// 1. 全局变量(直接在全局作用域下声明)
// 注意:如果在函数内部没有声明直接赋值的变量也属于全局变量
var num = 0;
console.log(num); // 全局可使用
function fn1() {
console.log(num); // 局部可使用
}
fn1();
// 2. 局部变量(声明在函数内部)
// 注意:函数的形参也可以看做是局部变量
function fn2() {
var num2 = 1;
num3 = 2; // 这个也属于全局变量
console.log(num2); // 局部可使用
}
fn2();
// console.log(num2); // 全局不可使用,会报错
console.log(num3);
从执行效率来看:
- 全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
- 局部变量当程序执行完毕后就会销毁,比较节省内存资源
- 只要是代码,就至少有一个作用域
- 写在函数内部的就是局部作用域
- 如果函数中还有函数,那么这个局部作用域中又多了个局部作用域
- 根据内部函数可以访问外部函数变量的这个机制,用链式查找决定哪些数据能被内部函数访问,就成为作用域链(就近原则)