• 前端知识之查漏补缺二


    1.promise的优缺点

      缺点:

        1.一旦开始无法取消

        2.pending过程中,无法知道具体执行到哪个阶段是刚开始还是即将结束

        3.不设置回调函数,错误无法抛出到外部

      优点:

        1.解决回调地狱,层层嵌套的问题,改为链式结构

        2.更好地进行错误捕获,在层层嵌套的模式中使用定时器来抛出异常,但是由于执行栈和原函数不同,无法抛出错误,而promise reject即可

    Q: promise 中then 块默认会向下顺序执行,return 是不能中断的,可以通过 throw 来跳转至 catch 实现中断

    function fetch(callback) {
        setTimeout(() => {
            throw Error('请求失败')
        }, 2000)
    }
    try {
        fetch(() => {
            console.log('请求处理') // 永远不会执行
        })
    } catch (error) {
        console.log('触发异常', error) // 永远不会执行
    }
    
    // 程序崩溃
    // Uncaught Error: 请求失败
    
    function fetch(callback) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                 reject('请求失败');
            }, 2000)
        })
    }
    fetch()
    .then(
        function(data){
            console.log('请求处理');
            console.log(data);
        },
        function(reason, data){
            console.log('触发异常');
            console.log(reason);
        }
    ); 

    2.定时器为什么不精确

      eventloop循环机制中,异步事件定时器的时间间隔设置,只是把定时器中的执行代码添加到任务队列中的时间,而不是执行时间,任务队列中如果有其他任务,需要等其他任务执行完成后才能继续执行,所以队列中的其他异步执行任务会导致

    定时器的不精确

    可使用动态计算时差和web Worker来解决

    3.闭包的优缺点

      闭包: 可以访问局部作用域之外的函数

      优点:

        1.匿名自执行函数,不会污染全局对象,执行完就回被会被释放

        2.缓存,将创建的变量的值始终保持在内存中,例如函数柯里化 const add = a => b =>  a + b

        3.实现封装,封装对象的私有属性和私有方法

      缺点: 

        1.内存消耗

         通常来说,函数的活动对象会随着执行期上下文一起销毁,但是,由于闭包引用另外一个函数的活动对象,因此这个活动对象无法被销毁,这意味着,闭包比一般的函数需要更多的内存消耗。使用不当会很容易造成内存泄露。

        2.性能问题

         使用闭包时,会涉及到跨作用域访问,每次访问都会导致性能损失。

      

  • 相关阅读:
    Suricata, to 10Gbps and beyond(X86架构)
    golang语法学习(一):变量,常量以及数据类型
    Linux相关问题-CentOS6.5 x64版本号下Tomcat无法自启动的解决的方法
    软考之路--你存在我深深的脑海里
    Apache虚拟主机-解惑篇
    Apache 性能调优-参考篇
    Jmeter脚本录制
    整理LVS架构压力测试工作
    关于jboss的线程问题+java.lang.outofmemoryError
    CUDA入门
  • 原文地址:https://www.cnblogs.com/tllw/p/15405465.html
Copyright © 2020-2023  润新知