
发表日期: 2021-05-20 10:43:28 浏览次数:87
梁山微信公众号开发【梁山网络推广】梁山建站、梁山网站维护、梁山网页制作、梁山微信小程序代运营公司

梁山县位于鲁西南,处于山东省的泰安、济宁、菏泽和河南省的濮阳四地市交界处。
梁山建县于1949年8月,下辖13个乡镇、1个省级经济开发区、1个风景名胜区,672个行政村,77.6万人,地域面积964平方千米。
梁山县是古典名著《水浒传》故事发祥地,是全国首批命名的武术之乡, [1] 亦是中国专用汽车生产基地, [2] 2016年,地区生产总值(GDP)265.04亿元。
23. 取数组的最大值(ES5、ES6)
// ES5 的写法
Math.max.apply(null, [14, 3, 77, 30]);
// ES6 的写法
Math.max(...[14, 3, 77, 30]);
// reduce
[14,3,77,30].reduce((accumulator, currentValue)=>{
return accumulator = accumulator > currentValue ? accumulator : currentValue
});24.ES6 新的特性有哪些?
1. 新增了块级作用域 (let,const)
2. 提供了定义类的语法糖 (class)
3. 新增了一种基本数据类型 (Symbol)
4. 新增了变量的解构赋值
5. 函数参数允许设置默认值,引入了 rest 参数,新增了箭头函数
6. 数组新增了一些 API,如 isArray / from / of 方法 ; 数组实例新增了 entries(),keys() 和 values() 等方法
7. 对象和数组新增了扩展运算符
8.ES6 新增了模块化 (import/export)
9.ES6 新增了 Set 和 Map 数据结构
10.ES6 原生提供 Proxy 构造函数,用来生成 Proxy 实例
11.ES6 新增了生成器 (Generator) 和遍历器 (Iterator)
25.setTimeout 倒计时为什么会出现误差?
setTimeout() 只是将事件插入了“任务队列”,必须等当前代码(执行栈)执行完,主线程才会去执行它指定的回调函数。要是当前代码消耗时间很长,也有可能要等很久,所以并没办法保证回调函数一定会在 setTimeout() 指定的时间执行。所以, setTimeout() 的第二个参数表示的是最少时间,并非是确切时间。
HTML5 标准规定了 setTimeout() 的第二个参数的最小值不得小于 4 毫秒,如果低于这个值,则默认是 4 毫秒。在此之前。老版本的浏览器都将最短时间设为 10 毫秒。另外,对于那些 DOM 的变动(尤其是涉及页面重新渲染的部分),通常是间隔 16 毫秒执行。这时使用 requestAnimationFrame() 的效果要好于 setTimeout()。
26. 为什么 0.1 + 0.2 != 0.3 ?
0.1 + 0.2 != 0.3 是因为在进制转换和进阶运算的过程中出现精度损失。
下面是详细解释:
JavaScript 使用 Number 类型表示数字 (整数和浮点数),使用 64 位表示一个数字。
图片说明:
第 0 位:符号位,0 表示正数,1 表示负数 (s);
第 1 位到第 11 位:储存指数部分(e);
第 12 位到第 63 位:储存小数部分(即有效数字)f;
计算机无法直接对十进制的数字进行运算, 需要先对照 IEEE 754 规范转换成二进制,然后对阶运算。
0.1 和 0.2 转换成二进制后会无限循环
0.1 -> 0.0001100110011001...(无限循环) 0.2 -> 0.0011001100110011...(无限循环)
但是由于 IEEE 754 尾数位数限制,需要将后面多余的位截掉,这样在进制之间的转换中精度已经损失。
由于指数位数不相同,运算时需要对阶运算 这部分也可能产生精度损失。
按照上面两步运算(包括两步的精度损失),最后的结果是
0.0100110011001100110011001100110011001100110011001100
结果转换成十进制之后就是 0.30000000000000004。
27.promise 有几种状态, Promise 有什么优缺点 ?
promise 有三种状态: fulfilled, rejected, pending。
1 . 一旦状态改变,就不会再变,任何时候都可以得到这个结果;
2 . 可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
1. 无法取消 Promise;
2. 当处于 pending 状态时,无法得知目前进展到哪一个阶段。
28.Promise 构造函数是同步还是异步执行,then 呢 ?promise 如何实现 then 处理 ?
Promise 的构造函数是同步执行的。then 是异步执行的。
promise 的 then 实现,详见: Promise 源码实现:
https://juejin.im/post/5c88e427f265da2d8d6a1c84
29.Promise 和 setTimeout 的区别 ?
Promise 是微任务,setTimeout 是宏任务,同一个事件循环中,promise.then 总是先于 setTimeout 执行。同一个事件循环中,promise.then 先于 setTimeout 执行。
30. 如何实现 Promise.all ?
要实现 Promise.all, 首先我们需要知道 Promise.all 的功能:
1. 如果传入的参数是一个空的可迭代对象,那么此 promise 对象回调完成 (resolve), 只有此情况,是同步执行的,其它都是异步返回的;
2. 如果传入的参数不包含任何 promise,则返回一个异步完成.promises 中所有的 promise 都“完成”时或参数中不包含 promise 时回调完成;
3. 如果参数中有一个 promise 失败,那么 Promise.all 返回的 promise 对象失败;
4. 在任何情况下,Promise.all 返回的 promise 的完成状态的结果都是一个数组。
Promise.all = function (promises) {
return new Promise((resolve, reject) => {
let index = 0;
let result = [];
if (promises.length === 0) {
resolve(result);
} else {
setTimeout(() => {
function processValue(i, data) {
result[i] = data;
if (++index === promises.length) {
resolve(result);
}
}
for (let i = 0; i < promises.length; i++) {
//promises[i] 可能是普通值
Promise.resolve(promises[i]).then((data) => {
processValue(i, data);
}, (err) => {
reject(err);
return;
});
}
})
}
});
}如果想了解更多 Promise 的源码实现,可以参考我的另一篇文章:Promise 的源码实现(完美符合 Promise/A+ 规范):
https://juejin.im/post/5c88e427f265da2d8d6a1c84#heading-24
31. 如何实现 Promise.finally ?
不管成功还是失败,都会走到 finally 中, 并且 finally 之后,还可以继续 then。并且会将值原封不动的传递给后面的 then。
Promise.prototype.finally = function (callback) {
return this.then((value) => {
return Promise.resolve(callback()).then(() => {
return value;
});
}, (err) => {
return Promise.resolve(callback()).then(() => {
throw err;
});
});
}32. 什么是函数柯里化?实现 sum(1)(2)(3) 返回结果是 1,2,3 之和
函数柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
function sum(a) {
return function(b) {
return function(c) {
return a+b+c;
}
}
}
console.log(sum(1)(2)(3)); // 6引申:实现一个 curry 函数,将普通函数进行柯里化:
function curry(fn, args = []) {
return function(){
let rest = [...args, ...arguments];
if (rest.length < fn.length) {
return curry.call(this,fn,rest);
}else{
return fn.apply(this,rest);
}
}
}
//test
function sum(a,b,c) {
return a+b+c;
}
let sumFn = curry(sum);
console.log(sumFn(1)(2)(3)); //6
console.log(sumFn(1)(2, 3)); //6
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878