2016-09-27 76 views
2

我有這樣的代碼:JavaScript函數作爲參數未生效

var point = 2; 
var change = function(){point = 5}; 

function makeChange(point,change){ 
    change(); 
    alert(point); 
} 

makeChange(point,change); 

的想法是讓用戶在功能使用前通過一個條件的point價值的能力。 但它不生效。 當我添加alert(point)change功能它提醒5,但隨後警報2在makeChange功能。

+0

不能更改傳遞給函數的變量,並具有影響的「原始」變量 – vlaz

+1

可能重複的[不使用Javascript按引用傳遞?(http://stackoverflow.com/questions/13104494/does-javascript-pass-by-reference) – vlaz

+0

注意局部參數'point'和全局變量'point'兩個不同的變量。你正在警告'makeChange'內的本地'point'。基本上只需將您的第一個參數的名稱改爲「point」以外的名稱即可。 –

回答

0

問題是因爲您的參數與全局變量point同名。在下面的代碼:

var point = 2; 
var change = function(){point = 5}; 

function makeChange(point,change){ 
    change(); 
    alert(point); 
} 

makeChangechange()的通話將指派這裏makeChange(point,change)定義爲5局部參數point。不是全球point,它將保持爲2

一個簡單的方法來解決,這是在paramater沒有使用相同的名稱作爲point全局變量。否則,由於作用域的JavaScript會認爲你正在對本地定義pointmakeChange

var point = 2; 
 
var change = function(){point = 5}; 
 

 
function makeChange(Point,Change){ 
 
    Change(); 
 
} 
 

 
makeChange(point,change); 
 
alert(point);

0

當你調用函數你可以做這樣的事情。

makeChange(point,function(){return change}) 
1

你可以返回改變點()

var point = 2; 
var change = function(){ return point=5; }; 

function makeChange(point,change){ 
alert(change); 
} 

makeChange(point,change()); 
+0

我不明白。將「點」傳入'makeChange'開頭的「點」是什麼? – 2016-09-27 06:04:03

+0

那麼這個時候什麼是初始化點的使用?點= 5; – Bharat

+0

用戶想要改變點()的值()..所以我只是做了 – sheetal

0

您的代碼做的很好 - 事實上,如果你做一個makeChange(point,change);alert(point);右側你會看到返回5

令人困惑的是,數字(即2)通過值而不是參考(即點)傳入makeChange函數。因此,如果您提示point內部makeChange,原來通過將被給予:2

0

我覺得這段代碼的問題是局部和全局變量之間的混淆。

所以,當你現在傳遞變量函數makeChange(點,變更)的行爲就像局部變量的函數makeChange下一行,當你調用函數的變化及其變化的全球點值。 然後當你正在做警報,因爲在功能優先級是局部變量,所以你越來越2.

你可以使用相同的返回方法。

var point = 2; 
var change = function(){point = 5 return(point)}; 

function makeChange(point,change){ 
    point=change(); 
    alert(point); 
} 

makeChange(point,change);