高速公鹿

文章 评论 浏览 33

高速公鹿^ε^ 2022-05-04 13:57:12

非匿名自执行函数,函数名只读

第 33 题:下面的代码打印什么内容,为什么?

高速公鹿^ε^ 2022-05-04 13:54:12

感觉题目可以清晰一些,指定retry的入参是啥

 Promise.retry = function (fn, times) {
   return new Promise((rs, rj) => {
      return fn().then((res) => {
        rs(res)
      }).catch((err) => {
        if (--times >= 0) {
          return Promise.retry(fn, times)
        } else {
          rj(err)
        }
      })
   })
 }

第 159 题:实现 Promise.retry,成功后 resolve 结果,失败后重试,尝试超过一定次数才真正的 reject

高速公鹿^ε^ 2022-05-02 13:40:43

一、实现原理

(一)、var的实现原理

(二)、let的实现原理

(三)、const的实现原理

const 声明一个只读的常量。一旦声明,常量的值就不能改变。

二、应用场景

(一)var应用场景

(二)let应用场景

  • for 循环的计数器,就很合适使用 let 命令

(三)const应用场景

三、var、let、const的区别

(一)var

  • var 命令会发生“变量提升”现象,即变量可以在声明之前使用,值为 undefined
  • 内层变量可能覆盖外层变量
  • 用来计数的循环变量泄露为全局变量

(二)let

  • 声明的�全局变量不会挂在顶层对象下面
  • 所声明的变量一定要在声明后使用,否则报错,报错 ReferenceError
  • 暂时性死区,只要块级作用域内存在 let 命令,它所声明的变量就“绑定”(binding )这个区域,不再受外部的影响,在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。
  • 不允许重复声明

(三)const

  • 声明的�全局变量不会挂在顶层对象下面
  • const 声明之后必须马上赋值,否则会报错
  • const 简单类型一旦声明就不能再更改,�复杂类型(数组、对象等)指针指向的地址不能更改,内部数据可以更改。
  • const 一旦声明变量,就必须立即初始化,不能留到以后赋值。
  • const 命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。

四、参考文章

第 83 题:var、let 和 const 区别的实现原理是什么?

高速公鹿^ε^ 2022-05-01 10:48:34

嗯嗯,感谢,看明白了。发现了个小问题,关于while循环的2⃣️.4小点里面的

    // 4. 如果 oldEndVnode 和 newStartVnode 相同,执行 patch
    else if (isSameVnode(oldEndVnode, newStartVnode)) {
      patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue)
      // 这里是左移更新后的 dom,原因参考上面的右移。
      api.insertBefore(parentElm, oldEndVnode.elm, api.nextSibling(oldStartVnode.elm))
      oldEndVnode = oldCh[--oldEndIdx]
      newStartVnode = newCh[++newStartIdx]
    }

这里面的insertBefore应该不需要nextSibling了,直接插到oldStartVnode前面才对。

解析 snabbdom 源码 教你实现精简的 Virtual DOM 库

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文