为什么声明空的javascript函数然后添加属性

Bre*_*ent 2 javascript

ryan niemeyer这个博客上的代码bost声明了一个空函数(命名结果),然后为函数添加属性:

ko.dirtyFlag = function(root, isInitiallyDirty) {
    var result = function() {},
        _initialState = ko.observable(ko.toJSON(root)),
        _isInitiallyDirty = ko.observable(isInitiallyDirty);

    result.isDirty = ko.computed(function() {
        return _isInitiallyDirty() || _initialState() !== ko.toJSON(root);
    });

    result.reset = function() {
        _initialState(ko.toJSON(root));
        _isInitiallyDirty(false);
    };

    return result;
}; 
Run Code Online (Sandbox Code Playgroud)

在返回对象之前,这有什么优势可以简单地创建一个对象并分配相同的属性?

编辑

回应评论请求我看起来如何:要么宣布

var result={};
Run Code Online (Sandbox Code Playgroud)

在声明中,或作为一种风格的东西:

ko.dirtyFlag = function(root, isInitiallyDirty) {
    var _initialState = ko.observable(ko.toJSON(root)),
        _isInitiallyDirty = ko.observable(isInitiallyDirty);
    return {
      isDirty : ko.computed(function() {
        return _isInitiallyDirty() || _initialState() !== ko.toJSON(root);
      }),
      reset : function() {
        _initialState(ko.toJSON(root));
        _isInitiallyDirty(false);
      }
   };
}; 
Run Code Online (Sandbox Code Playgroud)

但语义是无关紧要的 - 函数的shell返回什么提供给消费代码/开发人员调用函数?

har*_*mic 5

在你发布的链接中,作者说

当ko.toJS运行时,它只会看到一个普通函数并忽略它.

换句话说,他正在使用这样一个事实,即他正在使用的框架将忽略他正在使用它的上下文中的函数,而如果他使用了一个对象,框架就不会忽略它.

他从不打算调用这个函数,只是将它用作存放脏标志的地方,同时欺骗淘汰框架忽略它.