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

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

在JavaScript的立即執行的具名函數A內修改A的值時到底發生了什么?

在JavaScript的立即執行的具名函數A內修改A的值時到底發生了什么?

翻閱古今 2019-04-19 16:13:12
如下代碼:(functionA(){console.log(A);//[FunctionA]A=1;console.log(window.A);//undefinedconsole.log(A);//[FunctionA]}())可以看到注釋里的輸出。這也就是說A=1這一步什么都沒有發生。它既沒有改變A的值,也沒有在window中添加新的屬性。而如下代碼:(functionA(){console.log(A);//undefinedvarA=1;console.log(window.A);//undefinedconsole.log(A);//1}())這個還是很好理解的,var語句被hoist到函數頂端,函數內定義了變量A但是沒有賦值,所以第一個log是undefined,因為有var,并沒有向global添加屬性,因此window.A也是undefined。接著,functionA(){console.log(A);//[FunctionA]A=1;console.log(window.A);//1console.log(A);//1}A();不在立即執行這個函數,結果也很符合直覺,打第一個log時,函數作用域內沒有找到A,因此向上層查找,找到函數A;然后A=1使得window對象多了一個屬性,第二個log結果是1,第三個log顯然也是1。那么問題來了,第一段代碼里,A=1到底做了什么呢?
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 623 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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