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
的代码。这包括嵌套在该函数中的其他函数中的代码。