简体   繁体   中英

What's the purpose of referencing the window object in Javascript?

Every property of the window object is a global variable. This means you can do something like this:

window.foo = 42;
alert(foo); //alerts 42
var bar = 3;
alert(window["bar"]); //alerts 3

Because of this, I've always wondered what the purpose was of referencing window in code like this

if(window.prompt("Enter Password") === "secret") {
  window.location.hash = "authorized";
  window.open("secretPage.html");
}

when you could omit window and have code that does exactly the same thing:

if(prompt("Enter Password") === "secret") {
  location.hash = "authorized";
  open("secretPage.html");
}

The use also seems inconsistent; I almost never see window.alert but I'll frequently see window.location .

Do people just like referencing window to make their code more verbose? Is there some good reason for doing this that I don't know about?

One situation in which it helps to be explicit is that it will be immediately clear inside a function that you intend to modify a global variable. For example:

function blah() {
    // a bunch of code preceding...
    test = "aha!";
}

Did someone forget to declare test with var ? Or is this intentional modification of a global? Compare:

function blah() {
    // a bunch of code preceding...
    window.test = "aha!";
}

Now it's immediately clear what is intended. Of course, you know, globals should be avoided in the first place, but you get my point.

window是隐式的,但是在可能的情况下避免歧义是一种很好的代码习惯。

I think it's generally used to avoid potential clashes with other variables in an enclosing closure. Also, style checkers like jslint will raise errors if you access global properties without an explicit object (except for well-known properties like window itself.)

That said, in a browser, when you get into multiple windows, eg, with iframes, etc., you may need to explicitly pass around a reference to the window object. (And if you really care about the details, the window object, or at least references to it, are very special and can't even be described in standard javascript.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM