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のスコープとホイスト

グローバル変数を使用する場合は、関数内で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
var a = 10;
sayHi();
function sayHi()
{
a = Number(a) + 10;
return (Number(a));
}
alert(a);
alert(sayHi()+10);
于 2012-09-29T04:39:22.770 に答える
0

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
于 2012-09-29T05:56:18.873 に答える