onload函数中的Javascript变量范围

时间:2014-06-01 05:25:33

标签: javascript variables scope global-variables

我遇到了类似的情况,很奇怪为什么p不知道b是什么,因为p是在与b相同的函数中定义的。< / p>

var a = "a";
window.onload = function() {
    var b = "b";
    var p = new Person();
    p.doIknowAorB();

}
function Person() {
    this.name = "nate";
}
Person.prototype = function(){
    var doIknowAorB = function() {
        console.log(a);
        console.log(b);
    };
    return {
        "doIknowAorB": doIknowAorB
    }
}();

2 个答案:

答案 0 :(得分:1)

您在声明的功能之外访问b

本地范围是面向功能的。

所以:

window.onload = function() {
    var b = "b";
    var p = new Person();
    p.doIknowAorB()'
}

b是匿名(未命名)函数的局部变量,该函数连接到onload。

但在p中的函数doIknowAorB中:

Person.prototype = function(){
    function doIknowAorB() {
        console.log(a);
        console.log(b);
    };
    return {
        "doIknowAorB": doIknowAorB
    }
}();

显然没有b。您可以访问a因为它是全局变量。

答案 1 :(得分:0)

因为b成为本地变量或匿名函数的私有变量。

javascript中的范围是面向功能的。

因此,无法在function阻止之外访问它。