javascript - 在 javascript 中缓存闭包

标签 javascript browser node.js closures

阅读问题的答案后: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/

相关文章:

IE 文本大小 (EG "Largest") 或任何其他可访问性设置(高对比度等)的 Javascript 测试

javascript - 如何使用 json.stringify 在 cookie 中正确存储对象数组?

javascript - 使用箭头键导航表单域和编辑文本

javascript - z-index 属性未被检索,而其他属性正在被相同的辅助函数检索

Android/iOS 移动浏览器 - 禁用事件

javascript - Mongo - 如何在插入或更新给定文档之前检查现有字段

Node.js - 通过 HTTP 隧道的 FTP(通过 HTTP 代理的 FTP)

javascript - 在不进行回流的情况下获取元素的宽度

javascript - 如何读取文件夹图像并在 html 中显示?

javascript - express.js - session 访问中间件不工作