var a = 10;
sayHi();
function sayHi()
{
var a = a + 10;
alert(a);
return a;
}
alert(a);
alert(sayHi()+10);
为什么上述结果不是20和30?我觉得第一个是20,然后是30.
答案 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