在下面的代码中,为什么我可以访问变量x.b?它不应该具有局部作用域吗?
代码
function x() {
var a = 3;
}
x.b = 8;
console.log(x.a);
console.log(x.b);
输出
undefined
8
function x() {
var a = 3;
}
x.b = 8;
console.log(x.a);
console.log(x.b);
输出
undefined
8
x
的构造函数中使用var
声明a
时,a
被标记为私有。但是当你执行x.b
时,实际上是在对对象x
添加属性b
。x.b
时,严格来说是访问对象x
的属性b
,其值为8。x
不是一个构造函数,也不是被用作构造函数;它只是一个普通的旧函数。 - user663031x
只是一个普通的函数。我记得上次看到过new
关键字... 嗯,我可能有点累了 :( - Samuel Tohfunction x() {
var a = 3;
return a;
}
x.b
不是一个“全局变量”。它是一个名为 x
的对象上的属性。 - user663031x.b = 8;
function x() {
var a = 3;
alert(x.b)
}
x();
console.log(x.a);
console.log(x.b);
但一定要在函数声明之前指定 x.b。
而对象 a 是在函数 x() 内指定的,这使它成为了私有的,这就是为什么控制台上 console.log(x.a) 的结果未定义的原因。
如果您像这样编写:
a = 5;
function x() {
var a = 3;
}
x.b = 8;
alert(a);
alert(x.b);
你将会得到以下结果:
5
8
对于 JavaScript 而言,a 和 x.a 是两个独立的对象。
x
和x.b
都是在全局范围内定义的。你为什么期望它们具有“局部范围”呢? - str