有人可以在Javascript中解释这种奇怪的行为吗?

时间:2016-01-06 18:35:31

标签: javascript

在此代码中:

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背景的人。

  1. this.a如何有效(如果之前没有定义?) 据我所知,this.a应该引用类的实例变量a

  2. 为什么会返回5

3 个答案:

答案 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
相关问题