Javascript ';风险值a';vs';这是.a';在功能块中
我试图在网上搜索,但没有得到任何答案。为什么在声明之前访问两个变量会有两种不同的输出:Javascript ';风险值a';vs';这是.a';在功能块中,javascript,Javascript,我试图在网上搜索,但没有得到任何答案。为什么在声明之前访问两个变量会有两种不同的输出: function test() { console.log(a); // prints 'undefined'. console.log(b); // prints 'b is not defined'. var a = 5; this.b = 10; } 首先,您试图在声明变量之前检查它们。 这是正确的顺序: function test() { var a=5; t
function test() {
console.log(a); // prints 'undefined'.
console.log(b); // prints 'b is not defined'.
var a = 5;
this.b = 10;
}
首先,您试图在声明变量之前检查它们。 这是正确的顺序:
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
本身为未定义的。如果要在函数内部使用b
,请在使用var
编写变量时使用this.b将变量变为函数
级别变量。因此现在a
是一个变量,它出现在consol.log(a)
之前,并且它没有给定值,因此它的未定义
对于b,在调用之前没有定义名为b的变量
使用var
定义的所有变量将是函数级变量,并将在函数中的任何其他变量之前创建。因此,a
将在启动时出现在函数中
这里,这个
将保存Windows的对象。当您在函数中声明var变量时,该变量仅限于该函数。这意味着该变量的作用域仅限于该函数,所以您不能在该函数之外访问该变量
但是,如果您使用它,那么它可以通过外部进行访问,但是您需要创建该类/函数的对象并通过它进行访问
函数测试(){
var a=5;
这个b=10;
this.printB=函数(){
把这个还给我;
}
this.printA=函数(){
返回a;
}
}
var obj=新测试();
控制台日志(obj.a)
控制台日志(obj.b)
console.log(obj.printA())
console.log(obj.printB())
对这个问题投了否决票的人应该留下一条评论来解释否决票。我没有投票,但这是不正确的this.b
不构成局部变量。@DanielT.-那也不对。在另一个函数内调用test()
,不会创建另一个函数的局部变量。您在注释中显示的示例仍将在test()
@nnnnnn this()内有this
作为window
。b将打印10,b也将在控制台打印10。logthis.(变量)称为“Intermediate”作用域var a
在函数中使用时不会创建全局变量。是的,其函数级别变量代码块不构成问题。你应该在那里声明问题,这样人们才能更好地找到答案。@RavinderKumar,你会想看看Darin Dimitrov指出的变量提升。代码最初是针对声明运行的。这允许在运行时命中变量和函数之前调用它们。因为这个.b是一个赋值而不是一个声明,所以您最终会看到它没有定义。