首页 > 编程语言 > 详细

面试题:javascripte中的'闭包'是什么?举例子

时间:2020-03-12 17:05:58      阅读:77      评论:0      收藏:0      [点我收藏+]

难度: 中等

一:闭包概念

闭包是再一个函数中定义的函数,并且可以访问再夫函数作用域中声明和定义的变量。

闭包可以访问三个作用域中的变量:

  1.在自己作用域中声明的变量

  2.在夫函数中声明的变量

  3.再全局作用域中声明的变量

常见例子: 函数防抖 || 函数节流

二:例子说明

  1.函数防抖

    概念: 在事件被触发n秒后在执行回调,如果在这n秒内又被触发,则重新计时。

      使用场景: 1).给按钮加函数防止表单多次提交

          2).判断scroll是否滑到底部,滚动事件+函数防抖

     总的来说,适合多次事件一次响应的情况

    

function debounce(fn, wait) {
    var timer = null;
    return function() {
        var context = this
        var args = arguments
        if(timer) {
            clearTimeout(timer);
            timer = null;
        }
        timer = setTimeout(function () {
            fn.apply(context, args)
        }, wait)
    }
}
var fn = function() {
    console.log(‘boom‘)
}
setInterval(debounce(fn, 500), 1000) //第一次再1500ms之后触发,之后每1000ms触发一次

 

  2.函数节流

    概念:规定一个单位时间,在这个单位时间内,只能有一次触发时间的回调函数执行,如果在同一个单位时间内某件事被触发多次,只能有一次生效。

      使用场景:

      1).游戏中的刷新率

      2).DOM元素拖拽

      适合大量事件按时间做平均分配触发

function throttle(fn, gapTime) {
    let _lastTime = null;
    return function() {
        let _nowTime  =+ new Date()
        if (_nowTime - _lastTime > gapTime || !_lastTime) {
            fn();
            _lastTime = _nowTime
        }
    }
}
let fn = () => {
    console.log(‘boom‘)
}
setInterval(throttle(fn, 1000), 10)

函数防抖和函数节流都是控制函数的执行次数。

如果有不正确之处,希望多多指正,谢谢

 

面试题:javascripte中的'闭包'是什么?举例子

原文:https://www.cnblogs.com/liangjh518/p/12469811.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!