将函数定义包装在直接匿名函数中是否有任何优点?
这是来自 jsfeat 的示例图书馆:
var get_channel = (function () {
return function(type) {
return (type & 0xFF);
}
})();
还是直接执行以下操作更好?
var get_channel = function(type) {
return (type & 0xFF);
};
在这种情况下,第一个版本似乎没有优势:
- 它更长,更难读,
- 它占用更多内存,因为闭包保留了对 外部激活对象,但里面没有有用的数据,
- 有时它会更慢(至少在理论上),因为如果引擎必须经过更长的作用域链,则访问全局变量需要更长的时间。
最佳答案
有一些优点,但在您提供的示例中不可见。优点是可以
- 通过在范围内捕获数据来创建更清晰的函数,使函数逻辑不会被数据阻碍或混淆。如果需要构造数据但希望此后每次数据都相同,或者如果您希望在多个调用之间共享数据而不导致全局命名空间发生冲突,那么这尤其有用。
- 根据环境或某些计算选择要返回的函数。这样您就不必一遍又一遍地运行相同的计算。
例如,您可以创建一个像这样的跨浏览器XHR函数
var XHR = (function () {
if (window.XMLHttpRequest)
return function () {
return new XMLHttpRequest();
};
else
return function () {
return new ActiveXObject("Microsoft.XMLHTTP");
};
}());
现在,XHR
的 future 调用不需要计算 if
逻辑,无论如何它总是相同的。
关于javascript - 为什么将函数定义包装在立即函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18208918/