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

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

4

4 回答 4

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 作用域和提升

如果要使用全局 var a,则不应var a在函数内部使用。

但更好的解决方案是使用参数。

function sayHi(a)
{
   a = a + 10;
   alert(a);
   return a;
}
于 2012-09-29T04:37:01.847 回答
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);
于 2012-09-29T04:37:04.710 回答
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
于 2012-09-29T05:56:18.873 回答
0
var a = 10;
sayHi();
function sayHi()
{
a = Number(a) + 10;
return (Number(a));
}
alert(a);
alert(sayHi()+10);
于 2012-09-29T04:39:22.770 回答