' var a' vs' this.a'在功能块中

时间:2017-02-26 06:50:01

标签: javascript

我试图在互联网上搜索但没有得到任何答案。为什么在声明之前访问两个变量有两个不同的输出:

function test() {
    console.log(a); // prints 'undefined'.
    console.log(b); // prints 'b is not defined'.
    var a = 5;
    this.b = 10;
}

3 个答案:

答案 0 :(得分:1)

当你用var var a编写变量时,它就变成了一个函数 级别变量。所以现在a是一个变量,它出现在consol.log(a)之前,并且没有给出一个值,所以它的undefined为b,在调用之前没有用名称b定义的变量。

使用var定义的所有变量都是函数级变量,并且将在函数中的任何其他变量之前创建。所以a将出现在起始本身的函数中。

此处this将持有Windows的对象。

答案 1 :(得分:1)

当你在函数内部声明var变量时,该变量仅限于该函数。这意味着该变量的范围仅限于该函数,因此您无法在该函数之外访问该变量。

但是如果你使用它,那么它可以通过外部访问,但是你需要再次创建该类/函数的对象并通过它访问。

function test() { 
    var a = 5;
    this.b = 10;
  
  	this.printB = function(){
    	return this.b;
    
    }
    
    this.printA = function(){
    	return a;
    }
}

var obj = new test();
console.log(obj.a)
console.log(obj.b)
console.log(obj.printA())
console.log(obj.printB())

答案 2 :(得分:0)

首先,您尝试在声明之前检查变量。 这是正确的顺序:

function test()
{
  var a=5;
  this.b=10;

  console.log(a); // Should print 5
  console.log(b); // Should print undefined
  console.log(this.b); // Should print 10
}

其次,关于你的问题,在你的函数中声明var,make是你函数内的一个局部私有变量。 声明this.b,会导致b处于不同的范围,b将自己称为undefined。如果您想在函数中使用b,请使用this.b