我在someFile.js中看到了这段代码:
var someObject = {};
someObject.doWork = function(){
var innerFunction = function() {
console.log('innerFunction has been called');
}
innerFunction();
}
$(someObject.doWork);
此代码是属于durandal项目的捆绑包。这是某种模块模式吗?似乎jQuery被用来调用一个函数。
对于更常见的IIFE,有没有理由这样做?
someObject.doWork = (function(){
var innerFunction = function() {
console.log('innerFunction has been called');
}
innerFunction();
})();
要清楚,实际代码someObject
位于全局命名空间中。
答案 0 :(得分:1)
无法收集使用该特定模式的理由。 .doWork()
不返回任何值,也不返回原始对象。 $(someObject)
未定义为变量;至少在问题的javascript
。
将对象传递给jQuery()
的原因是在对象上使用jQuery方法,其中this[0]
将是回调中的原始对象;如,
$(someObject).animate({someObject.property:someObject.property})
请参阅Make a rotate animation: start and end slowly, but fast in the middle
答案 1 :(得分:0)
在第一种情况下,someObject.doWork
是一个函数。在第二种情况下(IIFE)someObject.doWork
未定义。我相信原作者打算创建一个模块,尽管是以非正统的方式。我计划重构代码以使用更易识别的模式。