という JavaScript グローバル変数を定義するとname
、window.name プロパティが非表示になりますか?
Facebook JavaScript認証APIのコンテキストでこれを尋ねます.その名前のグローバルを持つとそれが壊れることに気づいたので、またwindow.name
コードでそれが使用されているのを見たからです.
という JavaScript グローバル変数を定義するとname
、window.name プロパティが非表示になりますか?
Facebook JavaScript認証APIのコンテキストでこれを尋ねます.その名前のグローバルを持つとそれが壊れることに気づいたので、またwindow.name
コードでそれが使用されているのを見たからです.
name
がグローバル変数の場合、とname
はwindow.name
同等です。
グローバル変数と関数は、グローバル オブジェクトのメンバーです。ブラウザーでは、グローバル オブジェクトには、値がグローバル オブジェクトであるウィンドウ メンバーが含まれます。
を使用してグローバル スコープで変数を宣言するとvar
、グローバル オブジェクトにプロパティが作成されるか、既存のオブジェクトに書き込まれます (のようにname
)。
var name = 5;
console.log(window.name === '5'); // true
console.log(name === '5'); // true
console.log(Object.getOwnPropertyDescriptor(window, 'name'));
// object with get and set
var foo = 6;
console.log(Object.getOwnPropertyDescriptor(window, 'foo'));
// object with value
Object.defineProperty(window, 'bar', {
writable: false,
});
var bar = 7; // throws in strict mode
var baz;
console.log('baz' in window); // true
let
orで宣言するとconst
、次のようにはなりません。
const name = 5;
console.log(window.name); // likely an empty string
console.log(name === 5); // true
console.log(Object.getOwnPropertyDescriptor(window, 'name'));
// same as var
const foo = 6;
console.log(window.foo); // undefined
console.log(Object.getOwnPropertyDescriptor(window, 'foo'));
// undefined
Object.defineProperty(window, 'bar', {
writable: false,
});
const bar = 7; // succeeds
let baz;
console.log('baz' in window); // false