关键词:全局变量、局部变量、变量提升机制、内存回收机制、作用域、作用域链
变量(作用域)
局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用
全局变量 | 局部变量 | |
---|---|---|
作用域 | 整个程序 | 当前函数或循环等 |
生命周期 | 浏览器卸载页面才会结束 | 函数的执行过程中存在 |
闭包
- 概念:定义在一个函数内部的函数,读取内部变量。
- 用途:
- 是前面提到的可以读取函数内部的变量,
- 让这些变量的值始终保持在内存中。(合理利用,减少浏览器开销)
变量提升机制
- 当使用var定义变量,定义名称会提升到作用域顶部
console.log(varTest);//undefined
var varTest = 123;
console.log(letTest);//letTest is not defined
let letTest = 456;
内存回收机制
垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。
思考题
- b没有使用var,所以是定义一个全局的变量,注意严格模式b会报not defined
function fn() {
var a = b = 123;
console.log(a);
console.log(b);
}
fn();
console.log('outside: ' + a);//=>a is not defined
console.log('outside: ' + b);//=>outside: 123
- 作用域,内部没有定义,变量会往上寻找
var num = 123;
function fn() {
console.log(num)//=>123
}
- 作用域,就近原则
function fn() {
console.log(num)//=>undefined
var num = 456;
}
参考资料
这个系列文章是我收纳、归纳、回顾前端基础知识。供自我与有需要的人,共同进步。感谢前人的分享,如有错处,请多提点