我试图在互联网上搜索但没有得到任何答案。为什么在声明之前访问两个变量有两个不同的输出:
function test() {
console.log(a); // prints 'undefined'.
console.log(b); // prints 'b is not defined'.
var a = 5;
this.b = 10;
}
答案 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
。