阅读问题的答案后:JavaScript inner-functions and Performance
我想知道在这种情况下是否可以缓存内部函数(doSomethingCool):
function newUser(user){
function doSomethingCool(){
console.log(user);
}
}
最佳答案
你不能真正缓存一个闭包。。如果这样做,那么它仍然会关闭最初定义的函数的变量。
例如,您可能会考虑这样做,乍一看可能不错:
var newUser = (function() {
var doSomethingCool;
function newUser(user){
doSomethingCool = doSomethingCool || function(){console.log(user);};
doSomethingCool();
}
return newUser;
}());
我们第一次调用newUser
时,将创建doSomethingCool
函数。这是输出:
> newUser('foo')
foo
当我们第二次调用该函数时,闭包将被重用。这是输出:
> newUser('bar')
foo
为什么?因为闭包仅关闭定义它的函数调用的变量。
如果你真的想“缓存”该函数,你必须参数化它:
var newUser = (function() {
var doSomethingCool;
function newUser(user){
doSomethingCool = doSomethingCool || function(user){console.log(user);};
doSomethingCool(user);
}
return newUser;
}());
但我不会称其为闭包。从技术上讲,它是一个闭包,但您不使用此属性。
实际上,这样写要容易得多:
var newUser = (function() {
var doSomethingCool = function(user){...};
function newUser(user){
doSomethingCool(user);
}
return newUser;
}());
关于javascript - 在 javascript 中缓存闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476910/