關於變量提升這個玩意,你說簡單吧,很多人做好幾年前端了,仍然會暈掉,例如說我。
前幾天筆試遇到一個變量提升的問題,答案是寫出來了,然後面試官讓我講,我就講不出來了。
今天分享一篇看到別人的總結,加上一點自己的理解。希望能有所幫助,自己也能記住。
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);
不會的敲到控制檯,看看自己想的對不對。