高速公鹿^ε^ 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) } }) }) }
高速公鹿^ε^ 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
命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用。
四、参考文章
- 【阮一峰-ECMAScript6入门】(http://es6.ruanyifeng.com/)
高速公鹿^ε^ 2022-05-01 10:48:34
嗯嗯,感谢,看明白了。发现了个小问题,关于while循环的
// 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
前面才对。
- 共 1 页
- 1
非匿名自执行函数,函数名只读
第 33 题:下面的代码打印什么内容,为什么?