2012-05-09 9 views
3

私はここでJSを学んでおり、引数として渡されるときにプリミティブ値に関する質問があります。私は、単純な機能を持っていると言う:javascriptの関数引数としてのプリミティブ

var first = 5; 
var second = 6; 

function func(){ 
    first+=second; 
} 
func(); 
alert(first); //outputs 11 

だから、この場合には最初の値が11になっ..しかし、私は関数の引数として最初に渡すことで、それをしようとした場合、最初の5のまま。..

var first = 5; 
var second = 6; 

function func(first){ 
    first+=second; 
} 
func(first); 
alert(first); //outputs 5 

誰かが私にこのことを説明できるかどうか疑問に思う。

+0

「プリミティブ」型とは関係がないことに注意してください。これはjavascriptのスコープに関するものです。 – gdoron

+0

ありがとう、ありがとう。 –

+0

私はカップルの日にあなたはjsで答えの質問を始めると確信しています... Good Luck! – gdoron

答えて

4

これは、引数なしでfunction first()を呼び出すと、グローバル変数 "first"を使用するために発生します。しかし、function first(first)を呼び出すと、ブラウザには最初にローカル変数(関数内のみ)があり、グローバル変数には何も変更されません。firstここでは、コードです:

var first = 5; 
var second = 6; 
function func(first){ 
    first += second; //Local var "first" + global var "second" 
    alert(first); //Local var, outputs 11 
} 
func(first); 
alert(first); //Global var, outputs 5 
+0

それを得ました、ありがとう、私が探していたものです。 –

2

JavaScriptスコープのため、スコープ付き変数firstがグローバル変数を先にオーバーライドしています。つまり、first(関数内で宣言しているためスコープされています)のスコープ付きバージョンにsecondを追加しています。firstのグローバルバージョンは影響を受けません。

関数からfirstの宣言を削除した場合、Javascriptはfirstの次のバージョン(この場合はグローバルなもの)になります。

1
var first= 5; 
var second= 6; 

function func(first){ 

first+=second; // change the local first variable 

} 
func(first); 
alert(first);//outputs 5 - the outer variable wasn't changed. 

var first= 5; // global var 
var second= 6; 

function func(){ // first wasn't defined in the inner scope. 

first+=second; // change the global bar 

} 
func(); 
alert(first);//outputs 11 - the outer variable was changed. 
0

マーク・ライナスは、あなたの答えの権利を得たが、私は重要なメモを追加します。 JavaScriptのプリミティブ値は常に値によって渡されます.ArrayとObjectは常に参照によって渡されます。例:

オブジェクトまたは配列にオブジェクトがあると、それはもっと複雑になります。あなたのプログラムのすべてのインスタンスに変更が影響することを覚えておいてください。

関連する問題