web-dev-qa-db-ja.com

関数パラメーターの値を変更することは可能ですか?

function (a,b)など、2つのパラメーターを持つ1つの関数があります。関数内で、bの値を取得し、cに置き換えます。 $(b).replaceWith(c)のようなものを考えていましたが、うまくいきませんでした。関数内で新しい値を使用して新しい変数を作成できることは知っていますが、b自体の値を変更することは可能ですか?このようなものが可能です。それとも、パラメータは石で設定されていますか?

私がやろうとしていることを説明させてください。 3つの機能があります。1つは包括的な機能で、2つはトグルイベントによってトリガーされる機能です。そして、値を取得し、それを3番目の関数に渡すために、2番目の関数に何かをしてもらいたいです。ここにコードがあります

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を追加し、それを最初の関数で変更し、新しい値を2番目の関数に渡すことです。

26
Ben

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
34
BoltClock

JavaScriptで整数または文字列の値を変更することはできません[〜#〜] but [〜#〜]たとえば、オブジェクトの属性の値を変更できます

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

で電話するとき

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

y.x = 2になります。

14
mohamed.ahmed

変数がグローバルスコープにある場合、次のように設定できます。

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

次に、これを試してください:

var foo = 10;
modify('foo','bar');
console.log(foo); // bar
2
Cyoce

オブジェクトを渡すとき、そのオブジェクトへの参照を渡します。したがって、関数に渡されたオブジェクトを変更するとき、元のオブジェクトを変更します。したがって、1つの関数から次の関数に値を運ぶことができる単一の変数を含む非常に単純なオブジェクトを作成できます。

これらの関数呼び出しを別の関数のパラメーターリストに入れる方法について、注意すべきことが1つあります。パラメーターリストを評価するための実行順序がわからない。おそらく、Javascriptの詳細を知っている人がそれに答えることができます。ただし、すべての言語が左から右にパラメーターリストを評価するわけではありません。つまり、2番目の関数が最初の関数の前に実行される場合があります。繰り返しになりますが、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){}
)}
2
New Guy
b = c; // very little is set in stone in javascript
0
davin

値を置き換えることができます:

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

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

    changeB(a, b);    
}
0
Alistair Laing