在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ js作用域 函數(shù)調(diào)用

js作用域 函數(shù)調(diào)用

function A(){
    var a=1;
    var d=2;
    B(d);

}
function B(d){
    console.log(a);
}
A() //Error a is undefined

對(duì)js函數(shù)執(zhí)行的作用域一直有點(diǎn)不明白
想問(wèn)一下,像上面的代碼,因?yàn)樵诤瘮?shù)A內(nèi)部調(diào)用B函數(shù),那整個(gè)作用域鏈不是應(yīng)該是B-A-window嘛?那我如果是找a,在作用域鏈最頂端(即B)找不到a之后,為啥不在A中找,好像直接就在全局環(huán)境中了是嗎?
麻煩能告知除了傳a參數(shù)進(jìn)去還有什么別的解決辦法,謝謝啦~~

回答
編輯回答
練命

js的作用域是詞法作用域無(wú)論函數(shù)在哪里被調(diào)用,也無(wú)論它如何被調(diào)用,它的詞法作用域都只由函數(shù)被聲明時(shí)所處的位置決定。
如果把B定義在A里面,B就可以讀到a了。

2018年3月13日 11:52
編輯回答
舊顏

不是看調(diào)用的情況,是看如何定義的。
如果你在函數(shù)A中定義函數(shù)B,B的作用域鏈就是B-A-window。

2017年11月15日 23:10
編輯回答
念初

函數(shù)作用域在函數(shù)定義的時(shí)候確定,B的定義在全局環(huán)境中,B的作用域是全局作用域。

2018年5月25日 02:52
編輯回答
遲月

塊級(jí)作用域之中,函數(shù)聲明語(yǔ)句的行為類似于let,在塊級(jí)作用域之外不可引用。在函數(shù)A中定義函數(shù)B就好了。有關(guān)作用域的問(wèn)題可以看看這個(gè)作用域

2017年6月15日 20:05
編輯回答
嫑吢丕

這個(gè)是規(guī)范。
你的例子中a無(wú)論如何在B中是訪問(wèn)不到的,而

function B(d){ // 這個(gè)d是本地名義變量,一個(gè)參數(shù)名,和A定義中的d沒(méi)有任何關(guān)系
    console.log("a");
}
function A(){
    var a=1;
    var d=2;
    B(d);// 這里用的值傳遞的方式讓B內(nèi)部的局部變量d有了A內(nèi)局部變量d的值,但B仍然不能訪問(wèn)到A中的局部變量a。

}

你理解的在B中調(diào)用時(shí)的B-A-window這樣的變量查詢路徑是想當(dāng)然的,其實(shí)對(duì)B來(lái)說(shuō)只有B-window,入口傳的參數(shù)是另外一回事,和變量查詢路徑?jīng)]有絕對(duì)關(guān)聯(lián)。

2017年3月30日 12:54