码迷,mamicode.com
首页 > 其他好文 > 详细

var的变量提升的底层原理是什么?

时间:2018-06-26 20:48:02      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:undefined   error:   strong   rip   情况   变量   col   define   error   

原理:JS引擎的工作方式是①先解析代码,获取所有被声明的变量;②然后在运行。也就是专业来说是分为预处理和执行两个阶段。

变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升。

例如:

console.log(a);
var a =1;

 

以上语句并不会报错,只是提示undefined。实际在js引擎中的运行过程是:

var a;
console.log(a);
a =1;

实际运行表示变量a已声明,但还未赋值。

 

但是变量提升只对var命令声明的变量有效,如果一个变量不是用var命令声明的,就不会发生变量提升。

console.log(aa);
aa =1;

以上代码将会报错:ReferenceError: aa is not defined

 

补充:js里的function也可看做变量,也存在变量提升情况

a();

function a(){
    console.log(1);
};

表面上,上面代码好像在声明之前就调用了函数a。但是实际在js引擎中,由于“变量提升”,函数a定义部分被提升到了代码头部,也就是在调用之前已经声明了。

但是!如果采用赋值语句定义函数,JavaScript就会报错:

a();

var a = function(){
    console.log(1);
};

// TypeError: a is not a function

因为js引擎把变量声明提升,此时,a就是一个变量,而并不是一个function,以下是js引擎实际运行代码:

var a;
a();

a = function(){
    console.log(1);
};

 

var的变量提升的底层原理是什么?

标签:undefined   error:   strong   rip   情况   变量   col   define   error   

原文地址:https://www.cnblogs.com/echo-hui/p/9230942.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!