試問 如果 nAdd=n 是不是就可以利用全局變量提出局部變量n了?。?/h1>
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
如果不行的話?為何nAdd=function(){n+=1}可以調用里面的n呢?難道是因為nAdd是由一個函數調用的 那么如果nAdd在f1的外面也可以調用嗎?WHY??求大神
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
如果不行的話?為何nAdd=function(){n+=1}可以調用里面的n呢?難道是因為nAdd是由一個函數調用的 那么如果nAdd在f1的外面也可以調用嗎?WHY??求大神
2017-03-12
不行,我還是厚著臉皮再來一次。
首先,nAdd是全局變量,用nAdd = n的方式是可以吧局部變量暴露出去的,如果nAdd是簡單的基本類型,n的每一次變化都需要通過nAdd = n的方式賦值。
第二個,關于n的作用域問題,這里nAdd的作用,形成閉包,局部變量n并不會在執行完result()后銷毀而是繼續保存在內存中。