JS中变量声明的底层逻辑(过程)

81 阅读1分钟

《用得上的前端知识》系列 - 你我都很忙,能用100字说清楚,绝不写万字长文

变量声明的过程分为三部分

  • 创建一个值;
    • 如果这个值是基本类型值,就直接在栈内存中直接创建;
    • 如果是引用类型值,需要在堆内存开辟一个新的空间,把里面的内容存储进去。
  • 创建一个变量(先把值创建好后,才是创建变量);
  • 让值与变量相关联。

举例说明

var obj = {
    name : 'xiaoqiang',
    fn : (function(a){
        console.log('a:', a);
    })(obj.name) //这行会报错:Cannot read property 'name' of undefined
}

上文的代码之所以会报Cannot read property 'name' of undefined,是由于变量提升的缘故,导致变量提前被声明了。如果上面的 obj 是用 let 或 const 关键字声明的,其报错信息就会变成 obj is not defined。

参考资料