4

function に渡さずに「a」変数から「hello world」をリストするように次のコードを変更したいと思います。出来ますか?

var a = "declared variable";

var fc = function () {
  console.log(a);
};

(function () {
  var a = "hello world";
  fc();
}) ();

編集:ああ、申し訳ありません...私は言及していません。グローバル変数を変更したくありません。「スコープ」変数の値を取得したいだけです。

4

4 に答える 4

1

を削除するだけですvar

var a = "declared variable";

var fc = function () {
  console.log(a);
};

(function () {
  a = "hello world";
  fc();
}) ();

var は、現在のスコープ内の変数を定義します。


編集に応じて、スコープにアクセスする唯一の方法は、スコープ内にいる (または引数として渡す) ことです。あなたはそれを渡したくないので、これが私が見る唯一の他のオプションです.

var a = "declared variable";

(function () {
  var fc = function () {
    console.log(a);
  };
  var a = "hello world";
  fc();
}) ();

または、このような構造に沿ってスコープを渡したい場合は機能します

var a = "declared variable";

var fc = function (scope) {
  console.log(scope.a);
};

(function () {
  this.a = "hello world";
  fc(this);
}).apply({});

非常に技術的に言えば、それはあなたが伝えている範囲ではありませんが、これがどのように行われるかです。

于 2013-05-31T12:08:13.017 に答える
0

別の答えを教えてください。そんなことは絶対にしないでください。これは遅かれ早かれ壊れる醜いハックであり、デバッグが難しく、速度が低下します。怠惰にならないでください。そのいまいましい値を渡してください。長期的には多くの時間を節約できます。

だから私の答えは、合格せずにあなたが望むものを適切に達成することはできないということですa.

于 2016-04-27T10:03:18.773 に答える
-1
var a = "declared variable";

var fc = function () {
  console.log(a);
};

(function () {
  var a = "hello world";
  this.a = a;  // assign a to global a
  fc();
}) ();
于 2013-05-31T12:10:29.327 に答える
-1

このようにできます。

window.a = "Hello world"
于 2013-05-31T12:08:05.720 に答える