亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教一道js面試題

請教一道js面試題

慕田峪9158850 2018-08-03 13:25:08
一個自執行的匿名函數代碼如下:    var a = 'World!';    (function () {         console.log(window.a); //world;         console.log(a) //undefined;        if (typeof a=== 'undefined') {            var a= 'Jack';            console.log('Goodbye ' + a);        } else {            console.log('Hello ' + a);        }    })();    console.log(a)在js中沒有塊級的概念,函數里可以訪問到函數外的全局變量,但函數外卻無法訪問函數里面的局部變量,按照這樣理解為什么在自執行的匿名函數里面無法訪問到a,而使用window.a卻可以訪問到,根據作用域鏈的查找來看,他不應該可以往上查找到a嗎?為什么要window.a行?在匿名函數里面打印this的值也是window來著,他和匿名函數外是同一個this之下吧,就有點說不通為什么在匿名函數里面直接訪問a會是undefined。。。誰能解釋一下匿名函數中的作用域鏈查找的過程??!
查看完整描述

2 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

自執行的匿名函數里,可以訪問到全局變量a,但是由于下面有var a,變量聲明提前,所以a拿到的是undefined,跟作用域鏈木有關系吧

查看完整回答
反對 回復 2018-08-05
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

var a = 'World!';

(function () {

     console.log(window.a); //world;

     console.log(a) //world;

})();

console.log(a);

這個是正常的, 問題出在var a= 'Jack'; Javascript 有一個規則叫變量提升, 收這個規則的影響實際上你的代碼變成了這樣:

var a = 'World!';

(function () {

     var a;  // var 聲明的變量會被自動的提升到作用域的頂端,這就導致 if 條件拿到的 a 的值是 undifined

     console.log(window.a); //world;

     console.log(a) //undefined;

    if (typeof a=== 'undefined') {

        a= 'Jack';

        console.log('Goodbye ' + a);

    } else {

        console.log('Hello ' + a);

    }

})();

console.log(a)


查看完整回答
反對 回復 2018-08-05
  • 2 回答
  • 0 關注
  • 970 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號