详解前端变量提升

Posted diyichen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解前端变量提升相关的知识,希望对你有一定的参考价值。

在非严格模式下,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);

 

以上是关于详解前端变量提升的主要内容,如果未能解决你的问题,请参考以下文章

javascript变量提升详解

js中的变量提升,运算符详解及计算机的进制

前端面试题,js预处理部分小结,函数声明提升和变量声明提升

JavaScript 为什么要进行变量提升,它导致了什么问题?

前端开发面试题-问答

前端开发面试题-问答