什么是JavaScript中嵌套函数的需要和使用

Mah*_*lam 7 javascript nested-function

我理解嵌套函数是什么,但我不明白为什么我们甚至首先需要嵌套函数.是否存在只能通过在JavaScript中使用嵌套函数来解决的问题.我看到的所有创建嵌套函数的示例都可以在不在函数内部创建函数的情况下进行编码,并且结果相同.那么哪个问题需要创建嵌套函数,并且只能通过使用嵌套函数来有效地解决.

All*_*hua 7

嵌套函数的核心重要性是范围生成.我们需要JavaScript中的嵌套函数和作用域来实现以下功能.

  1. 无污染的全局命名空间
  2. 功能模块化
  3. 封装模块的私有内部工作
  4. 防止标识符在不同脚本之间发生冲突
  5. 由于嵌套作用域内的变量有资格进行缩小,因此脚本大小较小.
  6. 它加快了标识符解析过程

这是一个示例模块,显示函数嵌套和范围提供的封装功能:

var notificationService = (function ($, toastr, undefined) {
    var _externals = {},
        _jqExtend = $.extend;

    /*
     * Private Methods
     */
    function _showMessage(params) {
        params = params || {};
        toastr.remove();

        if (typeof (params.title) === "undefined")
            toastr[params.method](params.msg);
        else
            toastr[params.method](params.msg, params.title);
    }

    /*
     * Public Members
     */
    _externals.clear = function () {
        toastr.remove();
    };

    _externals.showError = function (params) {
        params = params || {};

        _jqExtend(params, {
            method: "error"
        });

        _showMessage(params);
    };

    _externals.showInfo = function (params) {
        params = params || {};

        _jqExtend(params, {
            method: "info"
        });

        _showMessage(params);
    };

    _externals.showSuccess = function (params) {
        params = params || {};

        _jqExtend(params, {
            method: "success"
        });

        _showMessage(params);
    };

    _externals.showWarning = function (params) {
        params = params || {};

        _jqExtend(params, {
            method: "warning"
        });

        _showMessage(params);
    };

    return _externals;
})(jQuery, toastr);
Run Code Online (Sandbox Code Playgroud)

上面的代码使我们有能力控制暴露的内容.在此特定情况下,通过引用notificationService对象将所有附加到_externals对象的成员公开给全局名称空间.在不使用作用域的情况下,内部成员(_jqExtend和_showMessage)也将附加到窗口对象,并增加浏览器解析标识符引用所需的工作量.