2016-01-06 79 views
0

在此代碼:有人可以在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

我在chrome中定義了'undefined'。 – madox2

+0

https://gist.github.com/yask123/c520d7f67f5fa5910e82 – user5752691

+3

JavaScript中沒有這樣的東西。 Javascript與java沒有任何共同之處。 – arkascha

回答

2

我想你必須先運行你的第一個鈣,然後再定義並運行第二個鈣。 在第一個中,您正在初始化全局對象的成員a。 在第二次您返回global.a(如果您在瀏覽器上運行,全局對象通常是窗口)。

您沒有一個類定義

+0

[OP的評論](http://stackoverflow.com/questions/34640278/can-someone-explain-this-weird-behaviour-in-javascript#comment57026018_34640278)確實顯示兩個處決 – Whymarrh

+0

是的,我忘了提及,在這個問題。更讓人懷疑的是,JS通過給它設置一個值來創造了一個全局變量? – user5752691

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 
相關問題