Javascript函数作为参数不起作用
我有以下代码:Javascript函数作为参数不起作用,javascript,Javascript,我有以下代码: var point = 2; var change = function(){point = 5}; function makeChange(point,change){ change(); alert(point); } makeChange(point,change); 这样做的目的是让用户能够在函数中使用点之前传递值的条件。 但它没有起作用。 当我在change函数中添加alert(point)时,它会在makeChange函数中向5发出警报,然后向2发出
var point = 2;
var change = function(){point = 5};
function makeChange(point,change){
change();
alert(point);
}
makeChange(point,change);
这样做的目的是让用户能够在函数中使用点之前传递值的条件。
但它没有起作用。
当我在change
函数中添加alert(point)
时,它会在makeChange
函数中向5发出警报,然后向2发出警报。调用函数时,您可以这样做
makeChange(point,function(){return change})
您可以在change()中返回点
您的代码运行良好-事实上,如果您执行警报(点)代码>紧接着进行更改(点,更改)
您将看到5
被返回
令人困惑的是,数字(即2)通过值而不是引用(即点)传递到makeChange
函数中。因此,如果您在makeChange
内警告点
,则会给出最初传递的值:2
我认为此代码的问题在于局部变量和全局变量之间的混淆
因此,当您在函数makeChange(point,change)中传递变量时,它的行为就像下一行中函数makeChange的局部变量一样,当您调用change函数时,它会改变全局点值。
然后,当您执行警报时,因为函数中的优先级是局部变量,所以您得到2
您可以使用返回方法处理相同的问题
var point = 2;
var change = function(){point = 5 return(point)};
function makeChange(point,change){
point=change();
alert(point);
}
makeChange(point,change);
问题是因为您的参数与全局变量point
同名。在下面的代码中:
var point = 2;
var change = function(){point = 5};
function makeChange(point,change){
change();
alert(point);
}
调用makeChange
内部的change()
将把此处定义的本地参数point
分配给5
。不是全局点
,它将保持为2
解决此问题的一个简单方法是不要在参数中使用与全局变量相同的名称point
。否则,由于作用域的限制,JavaScript会认为您正在执行本地定义的点内部makeChange
:
var点=2;
var change=function(){point=5};
函数makeChange(点,更改){
改变();
}
改变(点,改变);
警戒(点)代码>您不能更改传递到函数中的变量并使其影响“原始”变量注:局部参数点
和全局变量点
是两个不同的变量。您正在向makeChange
内的本地点发出警报。基本上,只需将第一个参数的名称更改为非点
。我不明白。首先,将“点”传递到makeChange
的“点”是什么?那么在这一点上初始化点有什么用呢?点=5;用户想要更改change()中的点值,所以我就这么做了that@torazaburo没有任何意义:P但也值得注意的是,该代码是危险的。它之所以有效,是因为change
和point
都存在于相同的范围内,并且change
使用相同的变量。如果这些都不是真的,那就行不通了。但是,如果两者都是真的,那么将两者传递给一个单独的函数是无点的(heh),这表明对函数如何工作缺乏理解-传递到makeChange
中的点不会改变。任何认为它与另一个相关的假设都是错误的。
var point = 2;
var change = function(){point = 5};
function makeChange(point,change){
change();
alert(point);
}