コーディング中に、top
、self
、left\right
などの特定の変数名を使用しようとすると、すべての種類のエラーが発生することがわかりました。 JavaScriptの背後にある理由は何ですか?他の言語でもJavaScriptを使用できますか?javascriptで特定の変数名を使用できないのはなぜですか?
答えて
グローバルという変数は、これらの名前を持つグローバルアクセサプロパティが既に存在するため使用できません。
top
は、トップフレームにアクセスするために使用されます。self
は、グローバルオブジェクトにアクセスするために使用されます。- 私が知る限り、
left
とright
に問題はありません。これらの変数に何らかの値を代入しようとすると
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 !!!
ほとんどの場合、JavaScriptでこれらの名前の変数を使用しても問題はありません。
一部の環境では、一部の名前は既に既存のグローバル変数に使用されており、読み取り専用です。
top
はその一例であり、the top level frameを指す。
これを非グローバルコンテキストの変数名として引き続き使用できます。
ほとんどの場合、var
/let
と宣言せずに変数を使用します。このような状況では、グローバル実行環境のプロパティを変更します。ブラウザで
、グローバルな実行環境がwindow
で、あなたは
self = '...'
を行うときに、あなたが効果的に
window.self = '...'
self
、top
、left
をください、right
が有してもよいwindow
オブジェクトのプロパティです特定の非標準的な振る舞い。 window
オブジェクトの多くの組み込みプロパティは、実際には変数を設定する以上のことを行う暗黙のセッターです。現在のページを変更したり、ナビゲートすることもできます。window
の多くの組み込みプロパティはオーバーライドできないため、効果はありません。
反して、あなたが
(function() {
var self = '...'
})()
を行う際に何か問題があるべきではありません。
グローバルスコープではvar
であっても、それでも暗黙的にプロパティーをwindow
に割り当てているため、新しいスコープを作成するには関数呼び出しが必要です。
'var self'はまだグローバルコンテキストでは問題になるかもしれません。 – Oriol
良い点 - 私は暗黙のうちに関数内での使用を想定していました。更新しました –
- 1. CSSの変数 - なぜ使用できないのですか?
- 2. __init__キーワードargでクラス変数を使用できないのはなぜですか?
- 3. 特殊なパラメータでenable_ifを使用できないのはなぜですか?
- 4. JavascriptでDjangoの文字列変数を使用できないのはなぜですか?
- 5. 変数にinnerHTMLプロパティを使用できないのはなぜですか?
- 6. jQuery変数を使用できないのはなぜですか?
- 7. javascriptのオブジェクトリテラルでプロトタイプを使用できないのはなぜですか?
- 8. 特定の関数(javascript/html)以外のフィールドを編集できないのはなぜですか?
- 9. $記号を変数名の一部として使用できないのはなぜですか?
- 10. ストアドプロシージャのテーブル名として変数を使用できないのはなぜですか?
- 11. クラスメソッドで定義済みの変数を使用できないのはなぜですか?
- 12. カスタムクラスで変数を設定できないのはなぜですか?
- 13. クエリで特定のインデックスが使用されないのはなぜですか?
- 14. javascript変数が関数間で変更されないのはなぜですか?次のJavaScript機能付き
- 15. テーブル名に特殊文字を使用しないのはなぜですか?
- 16. オブジェクトを定義するときに(JavaScript)ワーカーでこれを使用できないのはなぜですか?
- 17. JavaScriptの利回りを使用できないのはなぜですか?
- 18. POST変数の値を設定できないのはなぜですか?
- 19. なぜ起動コマンドでプログラム名に変数を使用できないのですか?
- 20. この特定のコードでこのコマンドを使用できないのはなぜですか?
- 21. JavascriptのStrictモードでなぜwithステートメントを使用できないのですか?
- 22. `document.getElementById`をグローバル変数に設定できないのはなぜですか?
- 23. クラス定義でrequire *ステートメントを使用できないのはなぜですか?
- 24. Visual Studioでは特定の変数名を使用できません
- 25. ラムダのメンバ変数を変更するのに[=]を使用できないのはなぜですか?
- 26. 複数のconstをJavaScriptで宣言できないのはなぜですか?
- 27. Javascriptでループをロールできないのはなぜですか?
- 28. PHPで入力ファイル名を変更できないのはなぜですか?
- 29. 分数器でquerySelectorを使用できないのはなぜですか?
- 30. 関数内でlapply factorを使用できないのはなぜですか?
下地言語、ECMAScriptのは、約40 [*予約語*を(http://ecma-international.org/ecma-262/7.0/index.html#sec-を有します予約語)。それが実装されているホスト環境(通常はブラウザ内のjavascript)には、回避する必要があるグローバル変数もあります。 – RobG