覆盖全局变量

时间:2013-05-31 12:04:50

标签: javascript scope global override local-variables

我想修改以下代码,从'a'变量列出“hello world”,而不将其传递给函数。有可能吗?

var a = "declared variable";

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

(function () {
  var a = "hello world";
  fc();
}) ();
编辑:对不起......我没有提到。我不想修改全局变量。我只想获得“范围”变量值。

4 个答案:

答案 0 :(得分: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({});

从技术上讲,这不是你传递的范围,但这就是它的完成方式。

答案 1 :(得分:0)

让我给你一个替代答案。 不要那么做。这是一个丑陋的黑客,它会更快或更早地破解,很难调试并会让你失望。不要懒惰,绕过那个该死的价值,从长远来看,它会为你节省很多时间。

所以我的回答是,如果不通过a,你无法正确地实现你想要的东西。

答案 2 :(得分:-1)

你可以这样做。

window.a = "Hello world"

答案 3 :(得分:-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();
}) ();