2016-11-24 4 views
0

を返し、パラメータと雄弁Javascriptをのスコープと私はconsole.logreturnの違いを理解するが、なぜ私が理解していないことですinside f1"inside f1"にconsole.logを使用して2つの異なる結果と私は第3章でプレーしてきた

var x = "outside"; 
 
var f1 = function() { 
 
    var x = "inside f1"; 
 
    console.log(x); 
 
}; 
 
f1(); // inside f1

:開発者向けツールコンソールは私に二つの異なる結果が得られますあなたがにconsole.logを呼び出したときに、 "F1の内側" に印刷されている最初のスニペットで

+0

F1の内側になるであろう今 'console.log'は'はconsole.log( – Mahi

+2

印刷データのためのものである) '、コンソールに値を出力'return'は呼び出し元に値を返します。 –

答えて

1

console.logreturn全く異なることを行います。

console.logは値をコンソールに表示します。 returnは実行中の機能を停止し、(オプションで)呼び出し元のコンテキストに値を戻します。 console.logは関数を終了しません。

両方のオプションについてお試しください。ここ

var x = "outside"; 
var f1 = function() { 
    var x = "inside f1"; 
    console.log(x); 
}; 
f1(); // inside f1 

console.logは単にコンソールにxの値を出力します。これには書式設定やその他の変更は含まれません。関数f1は何も返しません(関数の最後に暗黙のreturn;があります)。

今度は、コードの他のビットを見てみましょう:

ここ
var x = "outside"; 
var f1 = function() { 
    var x = "inside f1"; 
    return x; 
}; 
f1(); // "inside f1" 

あなたがreturnステートメントを使用しているため、機能f1は、戻り値を持っています。したがって、f1は、文字列inside f1を返します。 コンソールからf1を呼び出すため、コンソールは関数の戻り値をコンソールに出力します。他のコードがf1(アプリケーション内など)の場合は、コンソールに出力されません。

""の引用符に記載されているのは、開発者だけが知っている理由からコンソールがこの方法で文字列値を表示することです。値が "F1内部" であるので、このスニペットで

0

(x)です。 2つ目はx値を返すだけです。 2番目のスニペットの末尾に以下の行を置くだけで何が起こっているかを理解するためにあなたを助けるために

console.log(f1()); 
0

次の2つのスニペットに同じものを比較していません。

スクリーンショットを確認してください。

最初の呼び出し(f1())には、logの呼び出しの出力が表示され、戻り値は返されません。何も返さないため、関数の戻り値は未定義です。

seconコール(f2())では、関数の戻り値のみが返されます。これは文字列を返します。

console screenshot

0

、xは

var x = "outside"; 
 
var f1 = function() { 
 
    var x = "inside f1"; 
 
    console.log(x); 
 
}; 
 
f1();

このスニペットのよう

var x = "outside"; 
 
var f1 = function() { 
 
    var x = "inside f1"; 
 
return x; 
 
}; 
 
console.log(x);
を内部機能の範囲を有しています

xは内部スコープを失っていますが、グローバルxのスコープを持っていますので、理由の値が外になっています

まだ内部関数xの値を取得したい場合は、 VAR結果= F1()は、結果は

var x = "outside"; 
 
var f1 = function() { 
 
    var x = "inside f1"; 
 
    return x; 
 
}; 
 
var result=f1(); 
 

 
console.log(result);