我遇到了类似的情况,很奇怪为什么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
}
}();
答案 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
阻止之外访问它。