如何在覆盖函数中访问覆盖变量?

时间:2016-10-26 22:51:46

标签: javascript

我无法理解在下一段代码中如何获取特定变量a

var a = 1;
console.log(a);

function local() {
  var a = 2;
  console.log(a);
  function local() {
    var a = 3;
    console.log(a);
    function local() {
      var a = 4;
      console.log(a)
    }
    local();
  }
  local();
}
local();

我知道这是一个人为的例子,但如果没有答案我就无法入睡:)

那么我应该如何从任何覆盖函数中获取特定变量a? 感谢。

2 个答案:

答案 0 :(得分:2)

当您在本地作用域中声明一个与更高作用域中的变量同名的变量时,新声明会隐藏更高范围的变量,并且无法从本地作用域访问该更高范围的变量。

这就是Javascript的设计方式。围绕它没有一些神奇的方法。如果要访问更高范围的变量,则不要声明具有相同名称的局部变量。选择一个不同的名字。

如果最顶层的变量位于全局范围内,那么您可以使用全局前缀(例如window.aglobal.a访问该变量(取决于您使用哪种环境'重新开始运行)。但是,不能访问不在全局范围内的中间变量。

答案 1 :(得分:1)

您可以通过window对象访问全局变量,例如

var aa=11;
function my_func(){
    var aa=22;
    alert("local: "+aa+" global: "+window.aa);
}

但是没有办法访问函数外部的局部变量,因为它们实际上并不存在!