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

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

求助關于閉包和提升

求助關于閉包和提升

慕的地6264312 2019-04-19 16:29:42
functionf1(){    varn=999;    nAdd=function(){    n+=1    };    functionf2(){      alert(n);    }    returnf2;  }  varresult1=f1();varresult2=f1();  result1();//999result2();//999  nAdd(); result1();//是999而不是1000,這是為何呢?result2();//1000哪位大神可以解釋下?還有如果以nAdd=function(){    n+=1    };這種形式在函數內定義了一個全局變量,這個全局變量也可以訪問n嗎?不是全局變量不能訪問函數內的變量嗎?還有我記得有書上面說的是函數的作用域不是是取決于函數定義的時候而不是調用的時候的作用域嗎?這個全局變量nAdd不就是相當于定義的時候是全局嗎?所以不應該不能訪問n嗎?這一塊一直都不太懂,希望哪位大神可以教教我!謝謝
查看完整描述

2 回答

?
波斯汪

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

函數中變量的作用域是在定義的決定,而不是在在執行的時候。也就是
nAdd=function(){
 n+=1
};
這個賦值語句執行完畢后,變量n就是函數f1中的變量n,雖然nAdd是一個全局變量
varn=0;
functionf1(){
    varn=999;
    nAdd=function(){
    n+=1;
    returnn;
    };
    functionf2(){
      alert(n);
    }
    returnf2;
  }
f1();
nAdd();//返回值還是,而不是0
                            
查看完整回答
反對 回復 2019-04-19
  • 2 回答
  • 0 關注
  • 437 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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