相关疑难解决方法(0)

使用(函数(窗口,文档,未定义){...})(窗口,文档)赋予什么优势?

我想使用这种模式是新的热点,但我不明白它的优点是什么,我不理解范围的含义.

模式:

(function(window, document, undefined){
  window.MyObject = {
    methodA: function() { ... },
    methodB: function() { ... }
  };
})(window, document)
Run Code Online (Sandbox Code Playgroud)

所以我对此有几个问题.

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

我已经习惯了我称之为Crockford风格的Javascript封装(因为我把它从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 …
Run Code Online (Sandbox Code Playgroud)

javascript

59
推荐指数
2
解决办法
4万
查看次数

将*all*javascript变量(甚至未定义)作为函数参数传递的优缺点是什么?

让我们将Google Analytics Universal脚本作为我希望澄清,验证和/或扩展的实践的前提:

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
</script>
Run Code Online (Sandbox Code Playgroud)

谷歌选择将所有变量作为参数传递,而不是将其声明var.在这种情况下,明显的好处是将代码最小化(避免var范围中的关键字和=字符重复)am未定义...虽然将现有变量作为参数或对象传递到范围是很常见的,将未定义的变量作为参数传递给skip来声明它们是非常不寻常的.

我很有兴趣知道这种方法是否存在已知的警告.尤其:

这是使用更多还是更少的内存,还是等同于函数范围中声明的变量?

它对垃圾收集器有什么影响,怎么样?

增加或大量传递给函数的参数在性能方面是否有任何缺点?

附加说明:请不要回答.我对基于意见的答案感兴趣.此问题还不是关于传递对象范围,如下所述:https://stackoverflow.com/a/4665324/1647538.所以请不要回答这个特定的方面.

我只是从javascript 经验丰富的专家或浏览器实现者那里寻找可验证的基于事实的答案,具有javascript编译器的广泛知识,以及垃圾收集器的工作方式.

javascript performance function minify

6
推荐指数
1
解决办法
196
查看次数

标签 统计

javascript ×2

function ×1

minify ×1

performance ×1