将所有函数绑定到窗口对象有什么用

Whats the use of binding all function to window object?

本文关键字:对象 什么 窗口 绑定 函数      更新时间:2023-09-26

我对JS很陌生,我在这里有一个疑问。假设我有一个这样的函数:

function test(a) {}

这可以通过 window 访问,因此这样做:

window.test

我可以调用该函数。但是将所有函数绑定到对象的目的是什么window呢?有什么好处吗?

我有几个问题:

  1. 何时创建此window对象?是每页吗?
  2. 是否有任何函数,不会绑定到window
  3. window甚至可以访问私有变量、函数?

提前谢谢。

窗口对象是浏览器窗口 (1)。或者现在的选项卡。它是浏览器设置的系统对象。在global scope中创建的所有函数和表达式都绑定到 window 对象 (2)。JavaScript 不能像 cJava 那样创建私有变量。但是,当值位于closure中时,无法通过窗口对象 (3) 访问该值。

闭包:具有自己作用域的函数。闭包允许使用仅适用于函数的私有变量

请考虑以下代码:

var createClosure = function() {
  var a = 0;
  return function() {
    a++;
    return a;
  };
};
var a = createClosure();
a(); //displays 1
a(); //displays 2

现在有两个a。一个a是只能通过createClosure()访问的私有变量,另一个awindow对象的属性(全局可访问),并且是对createClosure中返回函数的引用。您无法全局访问第一个a

在函数中,定义变量时需要使用 var 关键字。如果不是,它们就会成为全球性的。

窗口是全局范围,所以这样做

var something = 'hi';
// or
window.something = 'hi';
// product the same result.
通常,将

变量添加到全局范围被认为是不好的,您应该使用闭包来创建对象/模块,以便将创建的全局数保持在最低限度。

var myModule = (function () {
  var something; // private, only accessable in this function
  return {
    someOtherThing : 'some value'; 
    // public, accessed with myModule.someOtherThing
  }
})();

在上面的例子中,只有window.myModule是全局的,内部变量/函数不是

每个变量或函数都可以使用窗口"关键字"访问,因为窗口是javascript中的超全局变量。

    窗口
  1. 对象是指您的窗口。
  2. 不。您可以调用任何带/不带窗口的函数(如果它在范围内,则不带窗口)
  3. 如何在javascript中创建私有变量?如果您谈论的是存储在带有"new"关键字的变量中的函数,那么不,窗口对象无法访问这些"私有"变量。
相关文章: