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のスコープとホイスト
グローバル変数を使用する場合は、関数内で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);
var a = 10;
sayHi();
function sayHi()
{
a = Number(a) + 10;
return (Number(a));
}
alert(a);
alert(sayHi()+10);
NaN
グローバルであるa = 10
か、まったく存在しないかに関係なく、関数は(現在のように)常に戻る必要がa = 999
あります。これはa
、関数内に値のないまったく異なるものを作成しているためです。
2つの可能なオプション:
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