0

関数内の名前が関数外の名前変数に関連していない理由を誰かが理解するのを手伝ってくれるかどうか疑問に思っていました。関数内で name のグローバル変数を変更したい場合はどうすればよいでしょうか?

var name = "Paul";

function test(name){
  name = name || 'You';
  console.log(name);
}

test('Mario');

console.log(name);

更新: 素早い返信ありがとうございます。行ごとに実行すると、これは何が起こっているのでしょうか?

マリオを関数に渡すと、名前のすべてのインスタンスが関数に渡された名前に置き換えられますか? したがって、次のようになります。

  "Mario" = "Mario" || 'You';

しかし、何も渡さない場合:

test();

じゃあ name = name じゃないの?なぜ||を取るのですか?声明?

4

5 に答える 5

2
var name = "Paul";   

function test(nameInput){
  name = nameInput || 'You';
  console.log(name);
}

重要な問題は、同じ名前のローカル変数とグローバル変数があることです。ローカル変数はグローバル変数よりも優先されます。入力変数の名前を変更して、両方を参照できるようにします。

于 2013-07-07T23:07:38.997 に答える
1

というグローバル変数nameと という関数パラメータがありますname。を呼び出すtestと、nameパラメーターはローカル変数になり、グローバル変数をシャドウします。グローバル変数にアクセスする場合は、変数名の 1 つを変更して、ローカル変数/パラメーターがグローバル変数を隠しないようにする必要があります。

于 2013-07-07T23:08:10.683 に答える
0

関数内のへの変更nameは、関数に対してローカルです。グローバル変数を変更したい場合はname、関数から変更を返す必要があります。

function test(name){
  name = name || 'You';
  console.log(name);
  return name;
}

name = test('Mario');

パラメーターに別の名前を使用すると言っているすべての人にとって、スコープについて混乱し、グローバル変数とローカル変数が混在している場合に発生する可能性のあるすべての問題に対処できるわけではありません。

OP は、Python dict get() methodのように機能する関数を望んでいるようです。スコープがうまくいけば、関数は一般的に任意の値に対して機能します。パラメータの名前を変更するだけで、1 つのグローバル変数でのみ機能する関数が作成されます。

于 2013-07-07T23:10:46.020 に答える
0

問題があります - 引数は、グローバル変数 (シャドウ)mainの可視性をクリアします。nameしたがって、グローバル引数にアクセスするには、引数の名前を変更する必要があります。

于 2013-07-07T23:07:46.653 に答える
0

あなたの例では、変数「name」は関数のローカルスコープで再定義されています。

これを希望どおりに機能させるには、ローカル変数に別の名前を付けて、グローバル変数を別の値に設定できるようにする必要があります。

サンプルは次のとおりです。

var name = "Paul";

function test(newName){
    name = newName;
    console.log(name); // is now Mario
}

test('Mario');

console.log(name); // reads Mario from the global variable
于 2013-07-07T23:16:04.203 に答える