4

我想修改以下代码以从“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

让我给你一个替代的答案。永远不要那样做。这是一个丑陋的 hack,迟早会坏掉,它很难调试并且会减慢你的速度。不要偷懒,传递那个该死的价值,从长远来看,它会为你节省很多时间。

所以我的回答是,如果不通过,您将无法正确实现您想要的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 回答