JavaScript函数变量范围

时间:2016-08-15 05:25:57

标签: javascript function scope

在下面的代码中,为什么我可以访问变量x.b?它不应该有本地范围吗?

CODE

function x() {
    var a = 3;
}


x.b = 8;

console.log(x.a);
console.log(x.b);

输出

undefined
8

2 个答案:

答案 0 :(得分:3)

当您使用vara的构造函数中声明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是两个独立的对象。