Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
onload函数中的Javascript变量范围_Javascript_Variables_Scope_Global Variables - Fatal编程技术网

onload函数中的Javascript变量范围

onload函数中的Javascript变量范围,javascript,variables,scope,global-variables,Javascript,Variables,Scope,Global Variables,我的情况与此类似,我很好奇为什么p不知道b是什么,因为p是在与b相同的函数中定义的 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 =

我的情况与此类似,我很好奇为什么
p
不知道
b
是什么,因为
p
是在与
b
相同的函数中定义的

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
    }
}();

因为
b
成为匿名函数的局部变量或私有变量

javascript中的作用域是面向函数的


因此,不能在
函数
块之外访问它。

您正在访问的
b
是在声明它的函数之外

局部范围是面向功能的

因此:

window.onload = function() {
    var b = "b";
    var p = new Person();
    p.doIknowAorB()'
}
b
是连接到onload的匿名(未命名)函数的局部变量

但是在函数doIknowAorB的
p
中:

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

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

原型方法都是关于访问调用该方法的对象的属性。原型方法和变量作用域之间没有特殊关系。他们可以访问的唯一变量是通过典型词法范围访问的变量,而且显然
b
位于分配给
doIknowAorB
的函数无法访问的范围内。我不理解为什么b“位于分配给doIknowAorB的函数无法访问的范围内”。。我不是JS专家,所以我想了解一下这一点。上面的副本将描述变量范围在JavaScript中的工作方式。这应该通过阅读基本的JavaScript教程来学习。唯一能够读取
b
变量的代码是函数中声明
b
的代码。这包括嵌套在该函数中的其他函数中的代码。