2012-09-29 134 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