当前位置: 首页 > 面试题库 >

使用(function(window,document,undefined){…})(window,document)有什么好处?[重复]

罗鸿畴
2023-03-14
问题内容

我猜想使用这种模式是新的热点,但是我不了解优点是什么,也不了解范围界定的含义。

模式:

(function(window, document, undefined){
  window.MyObject = {
    methodA: function() { ... },
    methodB: function() { ... }
  };
})(window, document)

所以我对此有几个问题。

封装这样的对象有特别的优势吗?
为什么要输入 窗口文档 而不是正常访问?
到底为什么undefined要传入?
将我们正在创建的对象直接附加到窗口是否是一个特别好的主意?

我习惯了我所说的Crockford风格的Java封装(因为我从Douglas Crockford Javascript视频中获得了它)。

NameSpace.MyObject = function() {
  // Private methods
  // These methods are available in the closure
  // but are not exposed outside the object we'll be returning.
  var methodA = function() { ... };

  // Public methods
  // We return an object that uses our private functions,
  // but only exposes the interface we want to be available.
  return {

    methodB: function() {
      var a = methodA();
    },
    methodC: function() { ... }

  }
// Note that we're executing the function here.
}();

这些模式中的一种在功能上是否优于另一种?第一个是另一个的演变吗?


问题答案:

为什么要输入窗口和文档而不是正常访问?

通常,为了加快标识符解析过程的速度,将它们用作局部变量可能会有所帮助(尽管IMO的性能改进可能微不足道)。

在非浏览器环境中,传递全局对象也是一种广泛使用的技术,在该环境中,您window在全局范围内没有标识符,例如:

(function (global) {
  //..
})(this); // this on the global execution context is 
          // the global object itself

为什么未定义的heck被传入?

这样做是因为undefinedECMAScript 3中的global属性是可变的,这意味着有人可以更改其值来影响您的代码,例如:

undefined = true; // mutable
(function (undefined) {
  alert(typeof undefined); // "undefined", the local identifier
})(); // <-- no value passed, undefined by default

如果您仔细查看undefined实际上没有被传递(函数调用中没有参数),那是undefined不使用property
即可获取值的可靠方法之一window.undefined

这个名字undefined在JavaScript并不代表什么特别的,是不是像一个关键字truefalse等等…,它只是一个标识符。

仅作记录,在ECMAScript 5中,此属性被设为不可写…

将我们正在创建的对象直接附加到窗口是否是一个特别好的主意?

当您在另一个函数范围内时,这是一种用于声明全局属性的常用方法。



 类似资料:
  • 问题内容: 我最近遇到了我的JavaScript代码问题,并从我的代码中取出了一部分代码,并将其放在解决该问题的位置。 现在我明白了刚刚解雇后,但它为什么没有准备好后,即后? 问题答案: 当所有资产(包括图像)加载完成时,会调用。当DOM准备进行交互时会触发。 在MDC中, window.onload : 加载事件在文档加载过程结束时触发。此时,文档中的所有对象都在DOM中,并且所有图像和子帧均已

  • 本文向大家介绍window对象和document对象有什么区别?相关面试题,主要包含被问及window对象和document对象有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 document对象是window对象的一部分 document是用来操作dom元素的 window对象当你打开浏览器时就被创建,这个浏览器的所有东西都是window对象属性

  • 问题内容: 您是否曾经看过 jQuery 1.4 源代码,并注意到它是如何通过以下方式封装的: 我以前从未见过这种特殊的语法。那 在那里做什么?为什么 需要通过传递然后再次出现在末尾? 问题答案: undefined是一个普通变量,可以使用轻松更改。因此,jQuery创建了一个真正未定义的局部“未定义”变量。 由于性能原因,将window变量设为本地变量。因为当JavaScript查找变量时,它首

  • 本文向大家介绍浅谈$(document)和$(window)的区别,包括了浅谈$(document)和$(window)的区别的使用技巧和注意事项,需要的朋友参考一下 首先 $(document)这个是获取文档对象 $(window)这个是获取窗口对象,也就是浏览器客户区 给大家举个例子就非常直接明了了 注意,让网页有滚动条 然后输出一下这两个值得大小,你就知道什么区别了 以上所述就是本文的全部内

  • 这是因为一些只兼容客户端的脚本被打包进了服务端的执行脚本中去。 对于只适合在客户端运行的脚本,需要通过使用 process.client 变量来判断导入。 举个例子, 在你的 .vue 文件中: if (process.client) { require('external_library') }

  • 本文向大家介绍请说说html、body、document、window四者的区别是什么?相关面试题,主要包含被问及请说说html、body、document、window四者的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 html 有多重意义,既是超文本传输协议,也是 HTML 文档的根元素,其他元素都是其子元素。 body body 元素包含了文档的可见内容,HTML 文档最终显示的内