非常に愚かな質問のように思われるに違いないことについてお詫びします。
私は現在codecadamyに取り組んでいますが、これは私を失望させています:
var greeting = function(name) {
name = "sausage";
console.log(name);
};
greeting(name);
私は私が得ることを理解していますsausage
書いてみませんvar name = "sausage";
か?違いはなんですか?
非常に愚かな質問のように思われるに違いないことについてお詫びします。
私は現在codecadamyに取り組んでいますが、これは私を失望させています:
var greeting = function(name) {
name = "sausage";
console.log(name);
};
greeting(name);
私は私が得ることを理解していますsausage
書いてみませんvar name = "sausage";
か?違いはなんですか?
name
inはfunction(name)
パラメータです。つまり、関数にデータを渡すために使用されます。ただし、パラメーターはローカル変数です。ただし、関数内に値を割り当てるのname
は少し奇妙です。私はあなたがこのようなことをしたいと思うでしょう:
var greeting = function(name) {
console.log(name);
};
greeting("sausage");
このバージョンのコードでは、パラメーターを介して値「sausage」を関数に渡しますname
。これは、関数を何度も呼び出すことができ、そのたびに、渡すものに応じて関数が異なる値を出力する可能性があるため、便利です。
関数定義:
function(name) {
名前はすでに宣言されています。関数のパラメータです。名前を変更したい場合は可能ですが、varを使用して新しい変数として宣言する必要はありません。
一方、たとえばフレーバーを追加する場合は、varがまだ定義されていないため、varを使用する必要があります。
var flavor = 'savory';
この場合、flavorはローカル変数であり、nameはパラメーターです。パラメータは、関数宣言で宣言されるローカル変数の一種ですが、ローカル変数は関数の他の場所で宣言される可能性があるため、必ずしもパラメータである必要はありません。
技術的には、実際の違いはありません。
ここで大きな背景を説明することなく、基礎となる実装では、アクティベーションオブジェクト(ES3)または字句環境レコード(ES5)と呼ばれる特別なオブジェクト(C / C ++レベルではjavascriptオブジェクトではない)が形成されることを理解する必要があります。。
ただし、このハッシュ/オブジェクト構造は格納に使用されます
var
ご覧のとおり、var
変数とパラメーターの両方がこの構造に格納されています。
この構成は、引数に渡されないためのデフォルト値を持っている可能性が最も高いです。実際の例では、これはおそらく次のようになります
var greeting = function( name ) {
name = name || 'default';
console.log( name );
};
greeting('john'); // 'john'
greeting(); // 'default'
パラメータは一般的なプログラミング構造であり、ワールドプログラミングで正気なことを行うために必要です(グローバル変数の大部分を扱うことは正気ではありません。
var name
パラメータの値をオーバーライドする新しい変数を関数スコープで宣言するname
ため、パラメータを使用できなくなります。
CodeAcadamyの例は、パラメーターの値をオーバーライドすることはめったにないため、少し奇妙です。特に、パラメーターを使用する前に。