Mah*_*lam 7 javascript nested-function
我理解嵌套函数是什么,但我不明白为什么我们甚至首先需要嵌套函数.是否存在只能通过在JavaScript中使用嵌套函数来解决的问题.我看到的所有创建嵌套函数的示例都可以在不在函数内部创建函数的情况下进行编码,并且结果相同.那么哪个问题需要创建嵌套函数,并且只能通过使用嵌套函数来有效地解决.
嵌套函数的核心重要性是范围生成.我们需要JavaScript中的嵌套函数和作用域来实现以下功能.
这是一个示例模块,显示函数嵌套和范围提供的封装功能:
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)也将附加到窗口对象,并增加浏览器解析标识符引用所需的工作量.