《javascript基础补充--作用域与作用域链相关知识点》

关键词:全局变量、局部变量、变量提升机制、内存回收机制、作用域、作用域链

变量(作用域)

局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用

全局变量 局部变量
作用域 整个程序 当前函数或循环等
生命周期 浏览器卸载页面才会结束 函数的执行过程中存在

闭包

  • 概念:定义在一个函数内部的函数,读取内部变量。
  • 用途:
    1. 是前面提到的可以读取函数内部的变量,
    2. 让这些变量的值始终保持在内存中。(合理利用,减少浏览器开销)

变量提升机制

  1. 当使用var定义变量,定义名称会提升到作用域顶部
console.log(varTest);//undefined
var varTest = 123;
console.log(letTest);//letTest is not defined
let letTest = 456;

内存回收机制

垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。

思考题

  1. 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
  1. 作用域,内部没有定义,变量会往上寻找
var num = 123;
function fn() {
    console.log(num)//=>123
}
  1. 作用域,就近原则
function fn() {
    console.log(num)//=>undefined
    var num = 456; 
}

参考资料

  • 阮一峰--学习Javascript闭包(Closure)
  • javascript的垃圾回收机制与内存管理
  • 局部变量和全局变量的区别

这个系列文章是我收纳、归纳、回顾前端基础知识。供自我与有需要的人,共同进步。感谢前人的分享,如有错处,请多提点

你可能感兴趣的:(《javascript基础补充--作用域与作用域链相关知识点》)