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