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

详解前端变量提升

时间:2019-07-14 13:03:22      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:code   变量   函数   逻辑   表达式   作用域   console   详解   var   

在非严格模式下,JavaScript中存在变量提升的特点。

1. 原因

JavaScript的工作原理是先编译再执行,在编译过程中,解释器会把所有声明“移动”到所在作用域的最上面,而赋值或其他逻辑会留在原地,这就是变量提升。

例如

foo();
function foo(){
  console.log(a); // undefined
  var a = 2;  
}

在编译后将被理解为下面的形式

function foo(){
  var a;
  console.log(a); // undefined
  a = 2;  
}
foo();

2.函数优先

在提升过程中,函数声明将首先提升,然后才是变量。只有函数声明( function a(){} )才会被提升,函数表达式( var a = function b(){} )不会提升。如果存在相同的声明,相同的变量声明将被忽略;相同的函数声明,后面的将会覆盖前面的。

例如

foo(); // 1
var foo;
function foo(){
  console.log(1);
}
foo = function(){
  console.log(2);
}

将被理解为

function foo(){
  console.log(1);
}
foo(); // 1
foo = function(){
  console.log(2);
}

 

详解前端变量提升

标签:code   变量   函数   逻辑   表达式   作用域   console   详解   var   

原文地址:https://www.cnblogs.com/diyichen/p/11183873.html

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