什么是使用绑定所有函数到窗口对象?

时间:2015-01-19 15:09:00

标签: javascript

我对JS很新,我对这里有疑问。假设我有这样的功能:

function test(a) {}

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

window.test

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

我几乎没有问题:

  1. 何时创建此window对象?是每页吗?
  2. 是否有任何功能,它不会绑定到window
  3. window甚至可以访问私有变量,函数吗?
  4. 提前致谢。

3 个答案:

答案 0 :(得分:1)

窗口对象是浏览器窗口(1)。或者现在的标签。它是浏览器设置的系统对象。在global scope中创建的所有函数和表达式都绑定到窗口对象(2)。 JavaScript无法创建像 c java 那样的私有变量。但是,当值在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关键字。如果不是,他们就会变得全球化。

答案 1 :(得分:1)

Window是全局范围,所以

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是全局的,内部变量/函数不会是

答案 2 :(得分:0)

每个变量或函数都可以通过窗口“keyword”访问,因为window是javascript中的超全局变量。

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