8 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個(gè)贊
function func(){...}
這是函數(shù)聲明
,將在代碼執(zhí)行前被(完整地)加載到作用域的最前端,因此在代碼編寫中可以(在同作用域或上層作用域中)后置,即題主所說的先調(diào)用再聲明。函數(shù)聲明/變量聲明都會(huì)被
hoisting
,其中函數(shù)聲明會(huì)被完整前置,而變量聲明僅前置聲明部分
而不前置賦值部分
。
代碼栗子:
(function(){
f1()
f2()
var f1 = function(){}
function f2(){}
})()
運(yùn)行時(shí):
(function(){
var f1,function f2(){} //hoisting,被隱式提升的聲明
f1() //ReferenceError: f1 is not defined
f2()
f1 = function(){}
})()
結(jié)論:
js目前就支持題主所說的先調(diào)用再聲明。


TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
你確定不可以?
test();
function test() {
console.log('test string');
}

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊
樓主是怎么得到這個(gè)結(jié)論的。
alert(a());
function a(){
return 1;
}//1
這樣的代碼是可以運(yùn)行的。
alert(a());
var a=function(){
return 1;
}//error: unexpected indentifier
這樣的代碼才會(huì)報(bào)錯(cuò)。
因?yàn)楹瘮?shù)聲明會(huì)在js解析器解析時(shí)候率先解析,保證其他代碼執(zhí)行之前,函數(shù)可用。而函數(shù)表達(dá)式必須要等到代碼解析器解析到他所在代碼行,才會(huì)被解釋執(zhí)行。

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
樓主,你沒搞懂JS的函數(shù)聲明提升。
a();
function a(){};
這個(gè)是可以執(zhí)行的,而像下面這樣是不行
a(); //a是undefined,a已是已經(jīng)聲明了,因?yàn)関ar a,但是未賦值
var a = function(){};
添加回答
舉報(bào)