关于变量提升这个玩意,你说简单吧,很多人做好几年前端了,仍然会晕掉,例如说我。
前几天笔试遇到一个变量提升的问题,答案是写出来了,然后面试官让我讲,我就讲不出来了。
今天分享一篇看到别人的总结,加上一点自己的理解。希望能有所帮助,自己也能记住。
1.关于声明变量的过程:
var a = 1; var b = 2;
其实他的执行过程是这样的:
var a; var b; a = 1; b = 2;
先声明变量,后执行赋值。
2.变量提升
function test(){ a=2; var a; console.log(a); } test()//2
执行过程:
function test(){ var a; a=2; console.log(a); }
再看一个例子
var a = 2; function test(){ console.log(a); var a = 1; } test()//undefined;
有木有人有点晕的,哈哈,其实看看执行过程就懂了:
var a = 2; function test(){ var a; console.log(a); a = 1; } test()//undefined;
这个就是变量声明的提升,以及执行顺序。
函数内部的声明变量被提升到了第一句就执行。赋值语句仍然在原来的位置。
3.函数声明,这里必须知道一点:函数声明提升,优先级高于变量声明提升。
console.log(foo); var foo =2; function foo(){ }
执行过程:
function foo(){ }; var foo;//函数声明也是声明变量的方式,该声明为重复声明,并不执行; console.log(foo); foo=2;
最后分享一道经典笔试题
var a = 2; function b(a){ console.log(a); var a = 1; function a(){} console.log(a); } b(a);
不会的敲到控制台,看看自己想的对不对。
本文出自 “11480093” 博客,请务必保留此出处http://11490093.blog.51cto.com/11480093/1911334
原文地址:http://11490093.blog.51cto.com/11480093/1911334