Javascript函数作为参数没有生效

时间:2016-09-27 05:54:57

标签: javascript

我有这段代码:

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

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

makeChange(point,change);

这个想法是让用户能够在函数中使用它之前传递值point的条件。 但它没有生效。 当我将alert(point)添加到change函数时,它会提醒5,但会在makeChange函数中提醒2。

5 个答案:

答案 0 :(得分:1)

你可以在change()

中返回点
var point = 2;
var change = function(){ return point=5; };

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

makeChange(point,change());

答案 1 :(得分:0)

调用函数时可以执行类似的操作。

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

答案 2 :(得分:0)

您的代码运行正常 - 事实上,如果您在 @Override public void onConnected(@Nullable Bundle bundle) { LocationListener mListenerone = new LocationListener() { @Override public void onLocationChanged(final Location location) { } }; LocationRequest requestone = LocationRequest.create(); requestone.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); requestone.setInterval(100); requestone.setFastestInterval(100); LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, requestone, mListenerone); LocationListener mListenertwo = new LocationListener() { @Override public void onLocationChanged(final Location location) { } }; LocationRequest requesttwo = LocationRequest.create(); requesttwo.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); requesttwo.setInterval(10000); requesttwo.setFastestInterval(1000); LocationServices.FusedLocationApi.requestLocationUpdates(mLocationClient, requesttwo, mListenertwo); } 之后立即执行alert(point);,则会看到makeChange(point,change);已返回。

令人困惑的是,数字(即2)通过值而不是引用(即点)传递到5函数。因此,如果您在<{strong> makeChange内警告point ,则会提供最初传递的makeChange

答案 3 :(得分:0)

我认为这段代码的问题是局部变量和全局变量之间的混淆。

因此,当您在函数makeChange(指向,更改)中传递变量时,当您调用change函数时,其函数makeChange的行为类似于函数makeChange,其变化的全局点值。 然后当你做警报时,因为在函数优先级是局部变量,所以你得到2。

你可以使用return方法。

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

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

makeChange(point,change);  

答案 4 :(得分:0)

问题是因为您的参数与全局变量point具有相同的名称。在下面的代码中:

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

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

change()makeChange的调用会将此处point定义的本地参数makeChange(point,change)分配给5。不是全局point,它将保持为2

解决此问题的一种简单方法是不在参数中使用与全局变量相同的名称point。否则,由于确定了JavaScript,您会认为您正在考虑point内部本地定义的makeChange

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

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

makeChange(point,change);
alert(point);
&#13;
&#13;
&#13;