30秒到達(dá)戰(zhàn)場(chǎng)
2019-05-29 16:49:33
Javascript函數(shù)范圍和提升我剛剛閱讀了一篇關(guān)于Ben Cherry的JavaScript范圍和提升的精彩文章,其中他給出了以下示例:var a = 1;function b() {
a = 10;
return;
function a() {}}b();alert(a);使用上面的代碼,瀏覽器將發(fā)出“1”警報(bào)。我仍然不確定它為什么會(huì)返回“1”。他說(shuō)的一些事情就像是:所有的功能聲明都被提升到頂部。您可以使用函數(shù)來(lái)調(diào)整變量的范圍。仍然沒(méi)有為我點(diǎn)擊。
3 回答

寶慕林4294392
TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
功能提升意味著功能被移動(dòng)到其范圍的頂部。那是,
function b() { a = 10; return; function a() {} }
將被重復(fù)者重寫為此
function b() { function a() {} a = 10; return;}
很奇怪,是嗎?
此外,在這種情況下,
function a() {}
表現(xiàn)得一樣
var a = function () {};
所以,從本質(zhì)上講,這就是代碼所做的事情:
var a = 1; //defines "a" in global scopefunction b() { var a = function () {}; //defines "a" in local scope a = 10; //overwrites local variable "a" return; } b(); alert(a); //alerts global variable "a"

婷婷同學(xué)_
TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
你必須要記住的是它解析整個(gè)函數(shù)并在執(zhí)行之前解析所有變量聲明。所以....
function a() {}
真的變成了
var a = function () {}
var a
強(qiáng)制它進(jìn)入局部范圍,變量范圍是通過(guò)整個(gè)函數(shù),因此全局變量仍然是1,因?yàn)槟阋呀?jīng)通過(guò)使它成為一個(gè)函數(shù)而聲明了一個(gè)局部范圍。

翻閱古今
TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超5個(gè)贊
函數(shù)a
內(nèi)部懸掛功能b
:
var a = 1; function b() { function a() {} a = 10; return;} b(); alert(a);
這幾乎就像使用var
:
var a = 1; function b() { var a = function () {}; a = 10; return;} b(); alert(a);
該函數(shù)在本地聲明,并且a
只在本地范圍內(nèi)進(jìn)行設(shè)置,而不是全局變量。
添加回答
舉報(bào)
0/150
提交
取消