为什么结果是NaN?

时间:2012-09-29 04:34:48

标签: javascript

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

为什么上述结果不是20和30?我觉得第一个是20,然后是30.

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

如果函数中的a与顶部声明的var相同,则不应使用a,因为这意味着重新声明新的sayHi变量。在使用前声明var a = 10; function sayHi() { a = a + 10; // No "var" keyword alert(a); return a; } sayHi(); alert(a); alert(sayHi()+10); 。这可能会像你期望的那样工作:

{{1}}

答案 2 :(得分:0)

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

答案 3 :(得分:0)

无论您的全局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)返回值

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

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