1

この切り取られたコードを見てください:

main = function() {
  alert('This is ' + T);
}

caller = function() {
  var T = 'me';
  main();
}

caller();

ご覧のとおり、関数 main で変数 T の値を識別したいのですが、ブラウザーに次のエラーが表示されます: T は未定義です。

変数 T のスコープをグローバル スコープに変更するか、T 変数を関数 main に渡すことでこのエラーを処理できますが、何らかの理由でそれらを使用したくなく、関数 main のスコープで変数 T を宣言したいと考えています。それは可能ですか?このシナリオをどのように処理できますか?

ありがとう。

4

8 に答える 8

6

次の 3 つのオプションがあります。

  • 両方の外で T を宣言する
  • T を main(T) にパラメーターとして渡す
  • 呼び出し元の内部にメインを書き込む
于 2013-08-14T06:42:26.840 に答える
3

Tはローカル変数でcallerあるため、内部では表示されません。簡単な解決策の 1 つは、パラメータとしてfrommainに渡すことです。Tcallermain

Tパラメータとして渡す必要があります

main = function(T) {
  alert('This is ' + T);
}

caller = function() {
  var T = 'me';
  main(T);
}

caller();

別の解決策はT、共有スコープで宣言することです。この場合はグローバルスコープで宣言するかmain、内部でクロージャー関数として宣言しますmain

于 2013-08-14T06:41:50.753 に答える
1

Tこれを行う最善の方法は、mainとを宣言する新しい関数を定義することcallerです。このようにして、両方の関数が値にアクセスできますが、グローバルではありません

var pair = (function() { 
  var T;
  var main = function() { 
    alert('This is ' + T);
  };
  var caller = function() { 
    T = 'me';
    main();
  };
  return { 'main': main, 'caller': caller}
})();

pair.main(); // Call main
pair.caller(); // Call caller
于 2013-08-14T06:43:19.930 に答える
0

このようなものはそれを処理できると思います。

main = function() {
  alert('This is ' + T);
}

caller = function() {
  var T = 'me';
  eval('var func = ' + main);
  func();
}

caller();
于 2013-10-12T11:27:59.863 に答える