2017-04-17 14 views
0

を使用して、それを再割り当てすることはできませんが、コードです:私はグローバル変数を宣言しましたが、ここでは機能

var num = 3 

myFunction(num) 

function myFunction(aNumber) 
{ 
    aNumber = 20 
} 

console.log(num) 

それはまだ「numが3」であると私はなぜ疑問に思ったことを言いましたか?

+1

JSにはポインタがありません。 'num'の現在の値を受け取った' aNumber'パラメータに '20'を代入しますが、' num'とは無関係です。 –

+0

'myFunction(num)' *は 'num'から値3を読み込み、(変数ではなく)値を' myFunction'に渡します。 'myFunction'はその値をパラメータaNumberで受け取ります。 'aNumber = 20'は' aNumber'に値20を格納します。これは 'num'に何の効果もありません。なぜなら、関数は呼び出しから' num'について何も知らないからです(それは他の手段を経由しますが、 'aNumber'パラメータで行います)。 –

+0

'myFunction'は' num'が定義されているコンテキストに対するクロージャであるため、 'num = 20'を直接行うことによって' myFunction' *は 'num'を更新できます。それが 'num'が定義されている文脈上の閉包でないならば、直接それを更新することはできません。 –

答えて

0

グローバル変数を関数に渡して再割り当てする必要はありません。

function myFunction() { 
    num = 20 
} 
console.log(num); 
+0

真ですが、これは関数が常に 'num'変数を変更したいと仮定しています。元のコードが与えられれば、渡された変数を変更することができます(そのように働いた場合)。 –

関連する問題