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

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

請問以下代碼執行后為什么會報錯(a is not defined);

請問以下代碼執行后為什么會報錯(a is not defined);

慕田峪8701529 2017-11-10 09:32:29
bbb();function bbb () { var a = 5; aaa();//這樣會報錯:a is not defined(function aaa(){ ? ?//寫成這樣就不會報錯,為什么? alert(a); })();}function aaa () { alert(a);}
查看完整描述

3 回答

?
落葉1111

TA貢獻57條經驗 獲得超9個贊

a的上下文環境在b函數中,alert(a)取得是全局的a,所以取不到

查看完整回答
反對 回復 2017-11-10
?
HOTLINE

TA貢獻33條經驗 獲得超23個贊

作用域的問題吧

在bbb的外面創建函數 alert (a) 此時的 a 指的是 window 上的 a? , 但是在window上并沒有聲明 a 所以 a is not defined;


但是你在bbb內部自執行 aaa 方法 ,此時存在一個作用域鏈 , 在 aaa 方法里沒有 a , 但是在他的外面 也就是 bbb有a 所以此時的a就是5


查看完整回答
反對 回復 2017-11-10
  • 慕田峪8701529
    慕田峪8701529
    謝謝回復,其實我就是想問,為什么在bbb函數里面直接寫成aaa()卻不能,而同樣寫在bbb函數里,寫成立即執行的形式就可以。。。
  • HOTLINE
    HOTLINE
    作用域的問題,在預編譯的時候作用域已經定好了 。 具體我也不是能講很清楚。 aaa 在外面定義 時 是 window到 aaa 方法里 在bbb里面調用aaa時 aaa任然是從自己的方法里找變量 沒有找到再到 window里面找 在bbb里定義時 window bbb aaa 自執行aaa 在本身的作用域 拿不到 找父級 也就是 bbb作用域
  • HOTLINE
    HOTLINE
    我已經盡我最大的能力了?
  • 3 回答
  • 0 關注
  • 2440 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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