Javascript 覆盖全局变量

Javascript 覆盖全局变量,javascript,scope,global,overriding,local-variables,Javascript,Scope,Global,Overriding,Local Variables,我想修改以下代码,从'a'变量中列出“hello world”,而不将其传递给函数。可能吗 var a = "declared variable"; var fc = function () { console.log(a); }; (function () { var a = "hello world"; fc(); }) (); 编辑:啊,对不起。。。我没有提到。我不想修改全局变量。我只想得到“scope”变量值。您可以这样做 window.a = "Hello world

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

var a = "declared variable";

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

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

编辑:啊,对不起。。。我没有提到。我不想修改全局变量。我只想得到“scope”变量值。

您可以这样做

window.a = "Hello world"

只需删除
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({});

从技术上讲,这不是你要讨论的范围,但这是如何做到的。

让我给你一个替代答案永远不要这样做。这是一个很难看的黑客程序,迟早会被破解,很难调试,而且会让你慢下来。不要偷懒,传递那个该死的值,从长远来看,它会为你节省很多时间

var a = "declared variable";

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

(function () {
  var a = "hello world";
  this.a = a;  // assign a to global a
  fc();
}) ();

所以我的答案是,如果不传递
a

它丢失
“声明变量”
值,你就无法正确实现你想要的。不要做Op要求的事情。谢谢你的回答,顺便问一下如何通过参数传递作用域?你能举个例子吗?编辑:nvm: