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