舉個栗子:
window.onload=function(){
var a=1;
var b=2;
plus(a,b);
function plus(a,b){
a=a+b;
b=0;
//此時在這個函數內還能調用到父函數中的a=1,b=2嗎?
}
}
這個問題是兩種不同變量在作為參數傳遞的問題,JS傳遞變量分為兩種一種是基礎變量,傳遞的是變量內容,第二種是引用變量(對象),在函數中傳遞的指向對象的指針,樓主這個函數傳遞的是基礎變量,所以在子作用域中修改了變量,在父作用域中變量並沒有修改,但是你如果將a、b封裝在對象中,將對象作為函數參數傳遞過去,就可以修改父函數的內容了。如下代碼所示。
window.onload=function(){
var a=1;
var b=2;
plus(a,b);
function plus(a,b){
a=a+b;// 等同於 var a = a+b;此處的a是子作用域新定義的a,那麼子作用域就有兩個名為a的基本變量,按js規則,後面定義的基本變量會覆蓋前者
b=0;//同上
}
}
修改代碼如下:
window.onload=function(){
var obj = {};
obj.a = 1;
obj.b = 2;
alert(obj.a);
alert(obj.b);
plus(obj);
function plus(obj){
a = obj.a+obj.b;
b = 0;
alert("innerA:"+obj.a);
alert("innerB:"+obj.b);
}
alert("outterA:"+obj.a);
alert("outterB:"+obj.b);
}