无法访问var变量,js中的范围

时间:2017-12-06 07:06:10

标签: javascript

我尝试了2个场景,其中一个我可以访问数据变量,而其他的则无法访问。需要澄清以清除我的范围概念 场景1:无法访问数据

function test() {
  var data = "from Test";
  secondFunction();
}

function secondFunction() {
  return function() {
    console.log(data);
  }();
}

test();

场景2:可以访问数据

function test1() {
  var data = "from Test1";
  var secondFunction1 = function() {
    return function() {
      console.log(data);
    }()
  }
  secondFunction1();
}

test1();

1 个答案:

答案 0 :(得分:0)

你需要将变量的范围增加到window对象,而不是它的工作。 在您当前的代码范围内变量仅限于该函数。所以你不能访问变量外部函数。

类似于在较大范围内声明变量,在下面它在window对象声明变量,因此它可以被所有函数访问。

window.data = 1;

如果你这样做,那么它可以在给定的窗口中访问。

通常应避免使用全球。您应该在函数范围内定义变量。

在第二种情况下,它的工作原因是data在给定函数的范围内,并且在第一种情况下data在第一个函数的范围内。这是它在第二种情况下工作的原因,但不是在第一种情况下。

在第二种情况下

function test1() {
  var data = "from Test1";
  var secondFunction1 = function() {
    return function() {
      console.log(data);
    }()
  }
  secondFunction1();
}

如果您看到secondFuction1能够获取数据,因为范围较大,则两者都是test1()的一部分。

任何非原始类型(undefined,null,number,string,boolean)都是JavaScript中的对象(或实例)。这意味着函数继承自object。对象实例可以包含更多可以是函数的实例。

所以如果你以OOD的方式通过上面的语句,那么test1()就是对象,在那个对象中你有一个名为data的属性和名为secondFuction1()的函数,在OOD中函数可以访问对象的属性,这就是它在你的第二种情况下工作的原因。