2017-01-01 3 views
0

コーディング中に、topselfleft\rightなどの特定の変数名を使用しようとすると、すべての種類のエラーが発生することがわかりました。 JavaScriptの背後にある理由は何ですか?他の言語でもJavaScriptを使用できますか?javascriptで特定の変数名を使用できないのはなぜですか?

+1

下地言語、ECMAScriptのは、約40 [*予約語*を(http://ecma-international.org/ecma-262/7.0/index.html#sec-を有します予約語)。それが実装されているホスト環境(通常はブラウザ内のjavascript)には、回避する必要があるグローバル変数もあります。 – RobG

答えて

3

グローバルという変数は、これらの名前を持つグローバルアクセサプロパティが既に存在するため使用できません。

  • topは、トップフレームにアクセスするために使用されます。
  • selfは、グローバルオブジェクトにアクセスするために使用されます。
  • 私が知る限り、leftrightに問題はありません。これらの変数に何らかの値を代入しようとすると

console.log(Object.getOwnPropertyDescriptor(window, 'top')); 
 
console.log(Object.getOwnPropertyDescriptor(window, 'self'));

あなたが期待するものしない可能性がある、セッターを実行します。ゲッタが1つしかセッタがない場合、割り当ては無視モードでは無視され、厳密モードでスローされます。

ローカル変数としてこれらの名前を使用する際に問題はありません。グローバル変数は使用しないでください。

(function() { 
 
    var top = 123; // local variable 
 
    console.log(top === 123); // true - no problem 
 
})(); 
 
var top = 456; // global variable 
 
console.log(top === 456); // false !!!

2

ほとんどの場合、JavaScriptでこれらの名前の変数を使用しても問題はありません。

一部の環境では、一部の名前は既に既存のグローバル変数に使用されており、読み取り専用です。

topはその一例であり、the top level frameを指す。

これを非グローバルコンテキストの変数名として引き続き使用できます。

2

ほとんどの場合、var/letと宣言せずに変数を使用します。このような状況では、グローバル実行環境のプロパティを変更します。ブラウザで

、グローバルな実行環境がwindowで、あなたは

self = '...' 

を行うときに、あなたが効果的に

window.self = '...' 

selftopleftをください、rightが有してもよいwindowオブジェクトのプロパティです特定の非標準的な振る舞い。 windowオブジェクトの多くの組み込みプロパティは、実際には変数を設定する以上のことを行う暗黙のセッターです。現在のページを変更したり、ナビゲートすることもできます。windowの多くの組み込みプロパティはオーバーライドできないため、効果はありません。

反して、あなたが

(function() { 
    var self = '...' 
})() 

を行う際に何か問題があるべきではありません。

グローバルスコープではvarであっても、それでも暗黙的にプロパティーをwindowに割り当てているため、新しいスコープを作成するには関数呼び出しが必要です。

+1

'var self'はまだグローバルコンテキストでは問題になるかもしれません。 – Oriol

+0

良い点 - 私は暗黙のうちに関数内での使用を想定していました。更新しました –

関連する問題