不确定这个js代码在做什么日历脚本

时间:2015-09-23 05:23:58

标签: javascript

这段代码只会让我的大脑受伤, js不是我的强项

我尝试过调整它,并设法让浏览器崩溃(我猜的是无限循环)

对我来说看起来像 如果window.load!= function然后创建新日历,否则执行window.load想要做的事情,然后创建新日历

是正确的吗?

为什么需要包装(function(){}?

(function() {
   var my = function() { new Calendar($option_str).show(); };
   var other = window.onload;
   window.onload = typeof other != 'function' ? my : function() { other(); my(); };
})();

1 个答案:

答案 0 :(得分:2)

(function(){})()是一个立即调用的函数表达式(IIFE)。这样做的原因是为了保护全局范围免受这些变量名称的污染,并且还可以使其更容易被垃圾收集。

这是可能的原因是因为函数表达式为执行的代码创建了一个新的执行上下文。此执行上下文创建自己的变量环境,即变量my和变量other所在的环境。上下文还可以访问窗口所在的词汇环境。

至于保存onload回调,检查它是否是一个函数,然后调用那里的新代码,以确保不会覆盖onload函数。当在文档的头部加载许多库时,这可能是不幸的,并且确保不要踩到其他人的onload很重要。

所以基本上归结为几个主要方面

  • 它使垃圾收集更容易
  • 避免污染全局命名空间
  • 保留以前的onload事件