是否可以更改函数参数的值?

我有一个带有两个参数的函数,例如function (a,b) 。 我想在函数中,取b的值,并用c替换它。 我在考虑像$(b).replaceWith(c)这样的东西,但它没有成功。 我知道我可以使用新值在函数内创建一个新变量,但是可以更改b本身的值吗? 这样的事情是可能的。 或者参数设置在石头上?

让我试着解释一下我想做什么。 有三个函数,一个是总体函数,然后是两个函数,由toggle事件触发。 我希望第二个函数做一些事情来获取值并将其传递给第三个函数。 所以这里是代码

 function(a,b){ $('selector').toggle( //I want this to gather a value and store it in a variable function(){}, //and I want this to accept the variable and value from the previous function function(){} )} 

我能想到的唯一方法是为总体函数添加一个参数c,然后用第一个函数修改它,并将新值传递给第二个函数。

您无法通过JavaScript中的引用显式传递; 但是如果b是一个对象,并且在你的函数中修改了b的属性,则更改将反映在调用范围中。

如果需要使用基元执行此操作,则需要返回新值:

 function increaseB(b) { // Or in one line, return b + 1; var c = b + 1; return c; } var b = 3; b = increaseB(b); // 4 

您无法在JavaScript中更改整数或字符串的值, 您可以更改对象属性的值,例如

 function change(x){ xx=2; } 

打电话的时候

 var y = {x:1}; change(y); 

将使yx = 2;

传递对象时,您将传递对该对象的引用。 因此,在修改传递给函数的对象时,您正在修改该原始对象。 因此,您可以创建一个包含单个变量的非常简单的对象,该变量允许您将值从一个函数传递到下一个函数。

关于将这些函数调用放入另一个函数的参数列表的方式,有一点需要注意。 我不确定执行的顺序是什么,用于评估参数列表。 也许知道更多关于Javascript的人可以回答这个问题。 但是,并非所有语言都会从左到右评估参数列表,这意味着您可能会发现第二个函数在第一个函数之前执行。 但是,我不确定Javascript的执行顺序,因此可能不是一个问题。

 function(a,b){ var object_c = { c: 10 }; $('selector').toggle( //send object_c in to gather a value and store it in the "c" field function(object_c){}, //send the same object_c object into the second function function(object_c){} )} 

如果变量在全局范围内,则可以按如下方式设置:

 function modify(name,newVal){ window[name] = newVal; } 

然后,试试这个:

 var foo = 10; modify('foo','bar'); console.log(foo); // bar 
 b = c; // very little is set in stone in javascript 

您可以替换值:

 function myFunc() { var a = 1, b = 2, c = 3; function changeB(a, b) { b = c; } changeB(a, b); } 

你的意思是:

 // fun is Your actual function (a,b) var actualFunction = fun; fun = function (a,b){ var c = 10; actualFunction(a,c); } 

让我解释一下内容:你正在创建一个变量(actualFunction)并让它保存指向你的函数(a,b)的指针(在这里命名为“fun”)。 然后你正在设置“fun”的新定义,所以它用你喜欢的参数调用旧的。

我不确定它是否没有例外,但请尝试并让我们知道。