美文网首页js
闭包的作用

闭包的作用

作者: u14e | 来源:发表于2017-02-23 11:54 被阅读29次

封装变量

// 加入缓存,调用相同参数时,直接从缓存取值,不必再进行运算
var cache = {};
var multi = (function() {
    return function() {
        var args = Array.prototype.join.call(arguments, ',');

        if (cache[args]) {
            return cache[args];
        }

        var a = 1;
        for (var i = 0, len = arguments.length; i < len; i++) {
            a = a * arguments[i]
        }

        return cache[args] = a;
    }
})()

console.log(multi(1, 2, 3));   // 6
console.log(multi(1, 2, 3));   // 6

由于cache只在multi函数被使用,可以把它封闭在multi函数内部

var multi = (function() {
    var cache = {};
    return function() {
        var args = Array.prototype.join.call(arguments, ',');
        
        if (cache[args]) {
            return cache[args];
        }

        var a = 1;
        for (var i = 0, len = arguments.length; i < len; i++) {
            a = a * arguments[i]
        }

        return cache[args] = a;
    }
})()

进一步封闭运算函数

var multi = (function() {
    var cache = {};
    var calculate = function() {
        var a = 1;
        for (var i = 0, len = arguments.length; i < len; i++) {
            a = a * arguments[i]
        }
        return a;
    }

    return function() {
        var args = Array.prototype.join.call(arguments, ',');

        if (cache[args]) {
            return cache[args];
        }

        return cache[args] = calculate.apply(null, arguments);
    }
})()

延续局部变量的寿命

var report = function() {
    var img = new Image();
    img.src = src;
}

report('http://xxx.com/getUserInfo');

在低版本浏览器中report函数进行数据上报时会丢失30%左右的数据,这是因为img是report函数的局部变量,函数执行完后,局部变量销毁,而此时可能还没来得及发出http请求,所以此次请求丢失

// 将img用闭包封装起来,防止局部变量销毁
var report = (function(){
    var imgs = [];
    return function() {
        var img = new Image();
        imgs.push(img);
        img.src = src;
    }
})()

相关文章

  • 闭包(closure)

    ● 闭包基础 ● 闭包作用 ● 闭包经典例子 ● 闭包应用 ● 闭包缺点 ● 参考资料 1、闭包基础 作用域和作...

  • 作用域和闭包

    目录 概述 作用域编译过程词法作用域全局作用域函数作用域 闭包循环和闭包闭包的用途性能 总结 概述 作用域和闭包一...

  • js作用域、闭包

    闭包 闭包作用 全局 局部 作用域链

  • 如何理解闭包?

    1、定义: 嵌套在函数作用域中的函数,称为闭包函数。该作用域称为闭包环境。通过闭包函数可以访问闭包函数所在函数作用...

  • js闭包问题

    javascript 闭包的概念,闭包的作用,闭包经典面试题详解(配图解) 函数作用域(闭包前置知识) 要彻底弄懂...

  • javaScript门道之闭包

    闭包的学习路径:变量的作用域 -> 闭包的概念 ->闭包的应用 1.变量的作用域 变量的作用域分为作用于全局和作用...

  • 执行环境 & 作用域 & 闭包

    执行环境 & 作用域 & 闭包 执行环境 , 作用域 , 闭包 , 闭包应用 执行环境 执行环境定义了 当前环境的...

  • JS面试常见问题汇总

    1、闭包 什么是闭包? 闭包就是可以访问另一个函数作用域中的变量的函数。 闭包的作用域链包含着它自己的作用域,以及...

  • 闭包

    闭包是什么;闭包的作用;闭包的一些特点。 什么是闭包,简单的说就是函数嵌套函数(红宝书),在函数作用域内,可以访问...

  • 14.JS基础之作用域与闭包

    作用域: 全局作用域 函数作用域 块级作用域(ES6新增) 常见的闭包有:作为函数返回值的闭包与作为函数参数的闭包...

网友评论

    本文标题:闭包的作用

    本文链接:https://www.haomeiwen.com/subject/kzzvwttx.html