详解前端变量提升
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);
以上是关于详解前端变量提升的主要内容,如果未能解决你的问题,请参考以下文章