JavaScript では、スコープが定義されていると考えることができ{ます}。
function x(){
var name=3;
var name=4;
console.log(name); // output is: 4
}
x();
しかし、これは半分だけ真実です。実際に何が起こるかというと、インタープリターがコードを調べて、すべてのvarステートメントを最初に移動し、それらに が割り当てられている間undefined(そしてすべての引数が定義され、スタックから取得されます)、次にコードを書き込みが実行されます。そのため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;元のステートメントと同じ場所になります。スタックに関することを理解していなくても、気にしないでください。これは、コンパイラが関数呼び出しをアセンブリに変換する方法です。時間があれば、知っておく価値があります。ここで重要なことではありません。
とにかく - これらの変更の直後に、おそらくいくつかの最適化が行われ、結果のコードが実行されます。これはあなたが書いたコードではなく、同等のものです。引数の再定義で指摘したのは、この変換が見えるようになるエッジケースです。