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;
元のステートメントと同じ場所になります。スタックに関することを理解していなくても、気にしないでください。これは、コンパイラが関数呼び出しをアセンブリに変換する方法です。時間があれば、知っておく価値があります。ここで重要なことではありません。
とにかく - これらの変更の直後に、おそらくいくつかの最適化が行われ、結果のコードが実行されます。これはあなたが書いたコードではなく、同等のものです。引数の再定義で指摘したのは、この変換が見えるようになるエッジケースです。