Можно ли изменить значение параметра функции? - PullRequest
25 голосов
/ 13 марта 2011

У меня есть одна функция с двумя параметрами, например 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 для всеобъемлющей функции, а затем изменить его с помощью первой функции и передать новое значение ввторая функция.

Ответы [ 7 ]

34 голосов
/ 13 марта 2011

Вы не можете явно передать по ссылке в 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
13 голосов
/ 26 января 2014

Вы не можете изменить значение целого числа или строки в JavaScript НО Вы можете изменить значение атрибутов объекта, например

function change(x){
x.x=2;
}

при вызове с

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

составит yx = 2;

2 голосов
/ 28 апреля 2015

Если переменная находится в глобальной области видимости, вы можете установить ее следующим образом:

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

Затем попробуйте это:

var foo = 10;
modify('foo','bar');
console.log(foo); // bar
2 голосов
/ 14 марта 2011

При передаче объекта вы передаете ссылку на этот объект.Таким образом, при изменении объекта, который был передан в функцию, вы модифицируете этот оригинальный объект.Следовательно, вы можете создать очень простой объект, содержащий одну переменную, которая позволит вам переносить значение из одной функции в следующую.

Следует отметить одну вещь, касающуюся способа размещения этих функций.вызывает в список параметров другой функции.Я не уверен, каков порядок выполнения для оценки списка параметров.Возможно, кто-то, кто знает больше о 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){}
)}
0 голосов
/ 13 марта 2011

Вы можете заменить значение:

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

    function changeB(a, b) {
        b = c;
    }

    changeB(a, b);    
}
0 голосов
/ 13 марта 2011

Вы имеете в виду:

// 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», поэтому оно вызывает старое определение с параметрами, которые вам нравятся.

Я не совсем уверен, работает ли оно без исключений, но, пожалуйста, попробуйте и дайте нам знать.

0 голосов
/ 13 марта 2011
b = c; // very little is set in stone in javascript
...