JavaScript中的window对象(window.something = something)是什么?

6

我不知道您是否需要查看完整的代码,但我见过一些插件可以实现这个功能:

window.dataValidate = dataValidate

这会将"dataValidate"添加到window对象中吗?还是它有其他作用?

它将dataValidate复制到一个同名的全局变量中。 - donkeydown
1个回答

7
这会将"dataValidate"添加到window对象中。
例如,如果您在另一个作用域内:
function foo() {
    var bar = 4;

    window.bar = bar;
}

你现在已经使bar成为全局变量,可以从任何地方访问它。如果没有window.bar = bar,你只能在foo()内部访问它。
通常会在IIFE的结尾看到这种用法,将工作发布到全世界(例如jQuery)。
(function () {
   var jQuery;

   // Setup jQuery

   window.jQuery = jQuery;
}());

您可能会看到有人这样做;

function foo() {
    bar = 4; // Note the lack of `var`
}

通过使用“隐式全局变量”,可以实现相同的效果;但在ES5严格模式下,它会抛出一个错误,并且通常被认为是一种不好的做法(程序员意味着将其置为全局变量,还是仅仅无意中省略了var)。


2
只有在 ES5 严格模式下才会抛出错误 - 在 ES5 规范的非严格模式下不会。 - Qantas 94 Heavy
1
@Qantas94Heavy:哈哈,谢谢纠正……我的大脑在写“ES5严格模式”,但似乎我的键盘有其他想法;)。 - Matt
1
或者你的大脑一半在严格思考问题,另一半则在吃东西 :-) - tgkprog
我觉得这个方法有用的原因在这里完全没有体现出来(“为什么不一开始就把它设为全局变量呢?”):使用作用域来设置你的对象,你可以确保不会将本应该是“私有”的东西变成全局的(实用函数、私有变量等)。通过最后对window的赋值,你可以轻松控制实际上导出的内容(即使让它变为全局),而且你可以轻松地改变导出方式(重命名、放到不同的命名空间中等)。 - Ingo Bürk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接