原理: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);
};

最新文章

  1. 分享10款非常有用的 Ajax 插件
  2. NOIP2016普及组
  3. 文件_ _android从资源文件中读取文件流并显示的方法
  4. CUBRID学习笔记 22 插入数据
  5. 【UVa-442】矩阵链乘——简单栈练习
  6. NSIS学习笔记(转)
  7. in, out, ref
  8. ios添加pre和post build action
  9. 微信支付WxpayAPI_php_v3(二)支付功能开发
  10. effective java笔记之单例模式与序列化
  11. Go 语言数组
  12. Pytorch中torch.autograd ---backward函数的使用方法详细解析,具体例子分析
  13. webpack优化相关操作
  14. vivo手机,自带世界之窗浏览器,sessionStorage设置的值为null
  15. Python项目代码结构
  16. Postgres 的 deferrable
  17. nginx-access.log的logstash解析
  18. MD5验签同一字符串得到不同的MD5签名值可能问题之一
  19. Python2.x 中文乱码问题
  20. 怎样使用CSS设置文字与文字间距距离?

热门文章

  1. Web前端性能优化——提高页面加载速度
  2. CAD处理键盘按钮被释放(com接口VB语言)
  3. matlab数值数据的表示方法,输出数据以及相关函数
  4. [SQL Service] 时间处理:获取今天的00:00:00/获取今天的23:59:59
  5. web前端学习总结--CSS
  6. mysql登录出现1045错误
  7. 第十三节:pandas之groupby()分组
  8. Huawei-R&S-网络工程师实验笔记20190527-华为设备密码重置、设置web管理
  9. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 G. Xor
  10. springCloud学习-断路器(Hystrix)