Можно ли изменить значение параметра функции?
У меня есть одна функция с двумя параметрами, например function (a,b)
. Я хочу в рамках функции взять значение b и заменить его на c. Я думал о чем-то вроде $(b).replaceWith(c)
, но это не сработало. Я знаю, что могу создать новую переменную внутри функции с новым значением, но можно ли изменить значение самого b? Это возможно. Или параметры, установленные в камне?
Позвольте мне попытаться объяснить, что я пытаюсь сделать. Существует три функции: одна всеобъемлющая функция, а затем две функции внутри нее, которые запускаются путем переключения события. И я хочу, чтобы вторая функция сделала что-то, чтобы получить значение и передать его третьей функции. Итак, вот код
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 для функции overarching, а затем изменить его с помощью первой функции и передать новое значение ко второй функции.
Ответы
Ответ 1
Вы не можете явно передать ссылку в 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
Ответ 2
Вы не можете изменить значение целого или строки в JavaScript НО, вы можете изменить значение атрибутов объекта, например
function change(x){
x.x=2;
}
при вызове
var y = {x:1};
change(y);
сделает y.x = 2;
Ответ 3
При передаче объекта вы передаете ссылку на этот объект. Поэтому при изменении объекта, который был передан в функцию, вы изменяете этот оригинальный объект. Поэтому вы можете создать очень простой объект, содержащий одну переменную, которая позволит вам переносить значение из одной функции в другую.
Есть одна вещь, которую следует отметить о том, как вы помещаете эти вызовы функций в список параметров другой функции. Я не уверен, что порядок выполнения для оценки списка параметров. Возможно, тот, кто знает больше о 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){}
)}
Ответ 4
b = c; // very little is set in stone in javascript
Ответ 5
Вы можете заменить значение:
function myFunc() {
var a = 1, b = 2, c = 3;
function changeB(a, b) {
b = c;
}
changeB(a, b);
}
Ответ 6
Если переменная находится в глобальной области видимости, вы можете установить ее следующим образом:
function modify(name,newVal){
window[name] = newVal;
}
Затем попробуйте следующее:
var foo = 10;
modify('foo','bar');
console.log(foo); // bar
Ответ 7
Вы имеете в виду:
// 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", поэтому оно вызывает старое с параметрами, которые вам нравятся.
Я не уверен, что он работает без исключений, но, пожалуйста, попробуйте и сообщите нам.