var a = 10;
sayHi();
function sayHi()
{
var a = a + 10;
alert(a);
return a;
}
alert(a);
alert(sayHi()+10);
爲什麼上面的結果不是20和30?我覺得第一個是20,那麼30爲什麼結果是NaN?
var a = 10;
sayHi();
function sayHi()
{
var a = a + 10;
alert(a);
return a;
}
alert(a);
alert(sayHi()+10);
爲什麼上面的結果不是20和30?我覺得第一個是20,那麼30爲什麼結果是NaN?
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;
}
如果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);
,有一行var a;我不知道爲什麼a是未定義的。謝謝 – stack01
@ stack01,'var a'這一行聲明瞭一個** new **變量。由於它是新的,它最初是未定義的。 –
var a = 10;
sayHi();
function sayHi()
{
a = Number(a) + 10;
return (Number(a));
}
alert(a);
alert(sayHi()+10);
您可能需要添加一些文字說明。 – Vikdor
在函數sayHi()中,數值返回的數字形式不是字符串形式,而是兩個數字的總和不集中字符串 –
你的功能(就像現在)是否應該總是返回NaN
,無論您的全球a = 10
或a = 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
您的第一句話是錯誤的,請參閱[本示例](http://jsfiddle.net/uRCtw/ ) - 任何帶有undefined的數學運算總是會導致NaN。 –
@ShadowWizard你是對的:),更新 – ajax333221
既然你聲明變量的值sayHI,它的調用UnDefined + 10 =未定義,即NaN 如果你刪除func中的'var'然後你會得到所需的輸出。 – djadmin