在实施事件时,为什么不使用IIFE来保护隐私?

2 javascript backbone.js

骨干中,当存储事件时,此约定用于表示私有变量:

_events
Run Code Online (Sandbox Code Playgroud)

但是,正如我们所知,这个属性非常不私密.为什么不做这样的事情让它变得私密?

var Events = (function () {
    var publik = {},
        events = {},      // private object literal
        eventsApi,        // private method
        triggerEvents;    // private method

    // define publik Events methods here

    return publik;
})();

_.extend(Backbone, Events);
Run Code Online (Sandbox Code Playgroud)

Flo*_*ine 6

否则,这是一个惯例问题.

惯例是人们不会让事情变得困难.使用一个简单的功能,没有IIFE,如果他们迫切需要,让人们搞乱你的"私人"变量.

你有没有必要更改库的代码,因为这个库隐藏了它的变量?好吧,当它发生时真的很痛苦.让变量可用,即使它们是"按惯例私有"的,也是一个真正的好处.

作为参考,[Common Lisp] [0]默认情况下其所有变量都是私有的.您可以手动导出一些.但是你总是可以使用特殊的语法来访问私有变量,这清楚地表明代码正在做一些它不应该做的事情(弄乱"未定义的行为").

[0]:可以说是最强大的语言,但显然是一个基于Javascript的语言.