这是 JavaScript 函数式的做事方式。它被称为闭包:函数从其当前作用域和任何其他父作用域携带变量指针。因此,这不仅是一种好的做法,而且是您通常应该遵循的模式,而不是推动参数对象等。
请注意,“this”引用是特殊的,它永远不会关闭(与任何其他引用相反),因此始终将全局对象指向匿名函数。
事实上,开发人员需要一些时间来充分利用闭包功能的强大功能——这是您刚刚编写的一个基本示例。在更高级(而不仅仅是异步)场景中,闭包可帮助您创建“即发即弃”行为,或者可以为您提供客户端代码无法访问的“私有”变量(对于库开发很有用)。闭包还可以帮助您隔离代码,使其不会与全局范围混淆。
1)示例:如何使用闭包创建受保护的变量。您可以访问两种可以访问“protectedVariable”的方法,但您不能自己访问它 - 因此可以保证控制。
function protectedScope(initData) {
var protectedVariable = initData;
return {
getter: function() { return protectedVariable; }
setter: function(v) { protectedVariable = v; }
}
}
var methods = protectedScope(10);
console.log(methods.getter());
2)隔离:即使使用“全局”函数定义,以下代码也不会在全局范围内产生垃圾
var API = (function() {
var protectedVariable = 0;
var myNotGlobalFunction() {
return protectedVariable;
}
return myNotGlobalFunction;
})();