まあJavaScriptではあなたは、スコープが私の中括弧に定義されていることを考えることができます:{
そして}
、および再定義することができスコープ変数の内部を、そう見て:
function x(){
var name=3;
var name=4;
console.log(name); // output is: 4
}
x();
しかし、これはちょうど半分本当です、実際に何が起こるかは、通訳者がコードを調べて、(すべての引数が定義され、スタックから取得されている)が割り当てられている間に、すべてのvar
ステートメントを先頭に移動してから、書き込んだコードが実行されます。したがって、最初の後のvar
は単に無視されます。あなたが書いたコードは次のようになります:
function mytask(name,title){
var name = arguments[0];
var title = arguments[1];
name = name;
title = title;
var showalert = ("Hi " + name + " your job title is " + title);
console.log(showalert);
return showalert;
}
document.write(mytask("dan", "administrator"));
したがって、あなたの再減速と割り当ては冗長です。とにかく - 範囲は変更されていませんが、それ以外は変わりません。
編集
インタプリタが何を実行すると、あなたのコードを乗り越え、どのvar x = y;
文はvar x = undefined;
とx=y;
に分割されます。 var x = undefined;
はコードの先頭に移動されます。 x=y;
は元の文と同じ場所にあります。スタックに関することを理解していない場合は、コンパイラが関数呼び出しをアセンブリに変換する方法については気にしないでください。時間がある場合に備えて知っておく価値があります。ここでは重要なことではありません。
とにかく - それらの変更の直後に、いくつかの最適化が行われると、結果のコードが実行されます。これはあなたが書いたコードではなく、同じコードです。引数を再定義する際に指摘したことは、この変換が目に見えるようになる場合です。
可能であれば、それぞれをどのように参照しますか? – cheeken
あなたは関数に渡す名前付き引数を関数内の変数名として使用できますか?はい、はいできます。これで何か問題がありましたか? –
コードが機能します。しかし、私はこれを維持したくありません。 –