在此代码中:
function calc(){
this.a = 5;
}
calc(); // Run the function once
// Redefine the function
function calc(){
return this.a;
}
// Re-run the function
calc();
// 5
来自Java背景的人。
this.a如何有效(如果之前没有定义?)
据我所知,this.a应该引用类的实例变量a
?
为什么会返回5
?
答案 0 :(得分:3)
"这"值取决于函数的调用方式。在全局函数(如您的示例)中,"这个"等于window对象。这意味着你的两个函数只是使用window.a(在你的情况下,它的值为5)。
您可以在此处找到更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
答案 1 :(得分:2)
我想你必须在定义之前运行你的第一个计算并运行你的第二个计算。 在第一个中,您正在初始化全局对象的成员a。 在第二个中,您将返回global.a(如果您在浏览器上运行,则全局对象通常是窗口)。
您没有定义课程
答案 2 :(得分:0)
@bknights是正确的。要获得您期望的行为,您需要new
该功能。
function calc(){
this.a = 5;
}
var c = new calc();
console.log(c.a); // will return 5.
c.a = 10;
console.log(c.a); // will return 10
var b = new calc();
console.log(b.a); // will return 5 again