Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript函数作为参数不起作用_Javascript - Fatal编程技术网

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);
}