2012-09-29 183 views
0
var a = 10; 
sayHi(); 
function sayHi() 
{ 
var a = a + 10; 
alert(a); 
return a; 
} 
alert(a); 
alert(sayHi()+10); 

爲什麼上面的結果不是20和30?我覺得第一個是20,那麼30爲什麼結果是NaN?

+2

既然你聲明變量的值sayHI,它的調用UnDefined + 10 =未定義,即NaN 如果你刪除func中的'var'然後你會得到所需的輸出。 – djadmin

回答

4
function sayHi() 
{ 
    var a = a + 10; 
    alert(a); 
    return a; 
} 

是相同

function sayHi() 
{ 
    var a; 
    // a in this function will be the loacal variable a, which is undefined at first 
    // a is undefined, undefined + 10 is NaN 
    a = a + 10; 
    alert(a); 
    return a; 
} 

檢查這篇文章:JavaScript Scoping and Hoisting

如果你想使用全局變量a,你不應該使用功能裏面有var a

但更好的解決方案是使用參數。

function sayHi(a) 
{ 
    a = a + 10; 
    alert(a); 
    return a; 
} 
+0

var a有什麼區別; var a = 1;你的意思是如果我宣佈var a;在一個函數中,仍然沒有定義。除了我給它一些價值?我對嗎? – stack01

+0

'var a; var a = 1;'與var a相同; a = 1;' – xdazz

+0

但在sayHi()函數中,有一行var a;我不知道你爲什麼說a是undefined – stack01

1

如果a在功能上是一樣的一個在頂部聲明,你不應該,因爲這意味着重新聲明一個新的變量a使用var。在使用之前還聲明sayHi。這可能會按照您期望:

var a = 10; 

function sayHi() 
{ 
a = a + 10; // No "var" keyword 
alert(a); 
return a; 
} 

sayHi(); 
alert(a); 
alert(sayHi()+10); 
+0

,有一行var a;我不知道爲什麼a是未定義的。謝謝 – stack01

+1

@ stack01,'var a'這一行聲明瞭一個** new **變量。由於它是新的,它最初是未定義的。 –

0
var a = 10; 
sayHi(); 
function sayHi() 
{ 
a = Number(a) + 10; 
return (Number(a)); 
} 
alert(a); 
alert(sayHi()+10); 
+1

您可能需要添加一些文字說明。 – Vikdor

+0

在函數sayHi()中,數值返回的數字形式不是字符串形式,而是兩個數字的總和不集中字符串 –

0

你的功能(就像現在)是否應該總是返回NaN,無論您的全球a = 10a = 999或者不存在的。這是因爲你在你的函數中創建了一個完全不同的a而沒有任何值。

兩個可能的選擇:

1)使用全局

function updateValue(){ 
    a += 10; 
    //don't need a return 
} 

var a = 10; 
updateValue(); 
//'a' is now 20 

2)在功能 'A' 再次返回

function getNewValue(num){ 
    num += 10; 
    return num; 
} 

var a = 10; 
a = getNewValue(a); 
//'a' is now 20 
+0

您的第一句話是錯誤的,請參閱[本示例](http://jsfiddle.net/uRCtw/ ) - 任何帶有undefined的數學運算總是會導致NaN。 –

+0

@ShadowWizard你是對的:),更新 – ajax333221