每天进步一点点

作用域链

  • 让人迷惑的例子
      function foo() {console.log(v)}
      function foo1() {
          var v = "v1"
          foo()
          console.log(v)
      }
      var v = "v";
      foo1();
    
  • 外部引用: 每个执行上下文的变量环境中,都包含了一个外部引用,用来指向外部的执行上下文。
  • 词法作用域: 词法作用域是指函数声明的位置来决定的,是静态的作用域,通过它就能够预测代码在执行过程中如何查看标识符。
  • 词法作用域在代码阶段就决定好了,和函数怎么调用没有关系

闭包

  • 在js中,根据词法作用域的规则,内部函数总是可以访问外部函数声明的变量,当通过一个外部函数返回一个内部函数后,即使该外部函数已经执行结束了,内部函数引用外部函数的变量依然保存在内存中,我们就把这些变量的集合称为闭包。
  • 1 预扫描内部函数
  • 2 把内部函数引用的外部变量保存到堆中

内存空间

  • 栈空间:原始类型的数据值都是直接保存在”栈“中的
    • 通常情况下,栈空间都不会设置太大,主要要来存放一些原始类型的小数据
  • 堆空间:引用类型的值是存放在”堆“中的
    • 堆空间很大,能存放很多的数据
  • 原始类型的赋值会完整复制变量值,而引用类型的赋值是复制引用类型
posted on 2021-10-25 16:15  柯蓝僧人  阅读(34)  评论(0编辑  收藏  举报