JS中的變量提升
先來看一個(gè)面試題目
var v='Hello World';
(function(){
alert(v);
var v='I love you';
})()
面試官問你這個(gè)結(jié)果是多少?你怎么回答?
實(shí)際結(jié)果是----undefined
原因是什么呢?這其實(shí)就是JS中的變量提升,就是把定義在后面的東東(變量或函數(shù))提升到前面中定義。
比如,我們定義三個(gè)變量
(function(){
var a='One';
var b='Two';
var c='Three';
})()
實(shí)際上,JS內(nèi)部運(yùn)作時(shí),由于變量提升,他是這樣的
(function(){
var a,b,c;
a='One';
b='Two';
c='Three';
})()
最上面那個(gè)面試題為啥會報(bào)undefined呢?
var v='Hello World';
(function(){
var v;
alert(v);
v='I love you';
})()
所以,在寫js code 的時(shí)候,我么需要把變量放在塊級作用域的頂端
var v='Hello World';
(function(){
var v = 'I love you';
alert(v);
})()
函數(shù)提升 :函數(shù)提升是把整個(gè)函數(shù)都提到前面去。在我們寫js code 的時(shí)候,我們有2中寫法,一種是函數(shù)表達(dá)式,另外一種是函數(shù)聲明方式。我們需要重點(diǎn)注意的是,只有函數(shù)聲明形式才能被提升。
成功:
function myTest(){
foo();
function foo(){
alert("我來自 foo");
}
}
myTest();
失?。?/p>
function myTest(){
foo();
var foo =function foo(){
alert("我來自 foo");
}
}
myTest();