收藏此站 联系我们 网站
当前位置:首页» 技术日志 » 【建站服务】梁山微信公众号开发【梁山网络推广】梁山建站、梁山网站维护、梁山网页制作、梁山微信小程序代运营公司-域名申请

【建站服务】梁山微信公众号开发【梁山网络推广】梁山建站、梁山网站维护、梁山网页制作、梁山微信小程序代运营公司-域名申请

作者: 风兰 . 阅读量: 3 . 发表时间:2022-09-20 15:39:37

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


梁山微信公众号开发【梁山网络推广】梁山建站、梁山网站维护、梁山网页制作、梁山微信小程序代运营公司

网站建设.jpg

梁山县位于鲁西南,处于山东省的泰安、济宁、菏泽和河南省的濮阳四地市交界处。

梁山建县于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 规范转换成二进制,然后对阶运算。

 1. 进制转换

0.1 和 0.2 转换成二进制后会无限循环

0.1 -> 0.0001100110011001...(无限循环)
0.2 -> 0.0011001100110011...(无限循环)

但是由于 IEEE 754 尾数位数限制,需要将后面多余的位截掉,这样在进制之间的转换中精度已经损失。

 2. 对阶运算

由于指数位数不相同,运算时需要对阶运算 这部分也可能产生精度损失。

按照上面两步运算(包括两步的精度损失),最后的结果是

0.0100110011001100110011001100110011001100110011001100

结果转换成十进制之后就是 0.30000000000000004。

 27.promise 有几种状态, Promise 有什么优缺点 ?

promise 有三种状态: fulfilled, rejected, pending。

 Promise 的优点

1 . 一旦状态改变,就不会再变,任何时候都可以得到这个结果;

2 . 可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。

 Promise 的缺点

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


梁山微信公众号开发梁山网络推广梁山建站、梁山网站维护、梁山网页制作、梁山微信小程序代运营公司


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务