在下面的代码中,为什么我可以访问变量x.b?它不应该有本地范围吗?
CODE
function x() {
var a = 3;
}
x.b = 8;
console.log(x.a);
console.log(x.b);
输出
undefined
8
答案 0 :(得分:3)
当您使用var
在a
的构造函数中声明x
时,a
会标记为私有,但是当您执行x.b
时你实际上是在说 - 将属性b
添加到对象x
。
因此,当您执行x.b
时,从技术上讲,您正在访问对象x
的属性b
,即8。
答案 1 :(得分:0)
Javascript将x.b视为全局对象。因此您甚至可以在以下功能中访问它:
x.b = 8;
function x() {
var a = 3;
alert(x.b)
}
x();
console.log(x.a);
console.log(x.b);
但请确保在函数声明之前指定x.b.
而在函数x()中指定了对象a,这使得它变为私有,这就是为什么你得到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是两个独立的对象。