ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

promise和高阶函数

2022-06-25 10:35:03  阅读:160  来源: 互联网

标签:function pre console 函数 res promise var 高阶 log


promise

<script type="text/javascript">
//服务器的组成
//协议 域名 端口
//https/http baidu.com/qq.com 8080/
// 同源策略:协议,域名,端口三者必须一致

//解决跨域的方式“常见”的三种:
//1).在后端的服务器上加上Access=control-Allow-orgin:*
//*所有的域名都可以访问当前服务器,简称cors
//2).使用jsonp,非官方跨域解决方案,算不上严格的ajax
//始终利用一些带有src的标签(script,iframe),不受限制的访问外部资源
//结合callback拿到数据
//3).服务器代理server proxy
//node服务器代理
//nginx的反向代理


//面试题2
//json和jsonp的区别:
//json:轻量级数据格式,用于网络传输,配置文件
//jsonp:非官方跨域解决方案,算不上严格的ajax
//始终利用一些带有src的标签(script,iframe),不受限制的访问外部资源
//结合callback拿到数据


//线程?进程?
//进程:是资源分配的最小单位,是程序执行的最小单位,程序的生命周期,双击程序,创建一个主线程,关闭结束主线程,是一个人
//线程:用来干活的,是手脚

//js引擎是单线程,容易造成堵塞,需要用回调函数解决异步问题
//回调函数有缺点,滥用回调函数造成回调地狱
//回调地狱不方便代码的维护和理解
//在es6推出promise
//完成了承诺
//未完成承诺

// 1.什么是promise
//是构造函数,需要被实例,是一个异步的微任务
//有三个状态,等待(pending),完成(fulfilled),拒绝(rejected)
//状态不可逆 等到-->完成或等待--->拒绝
//执行了resolve就不会执行reject,执行力reject就不会执行resolve
//原型方法 then catch finally
//静态方法 all,race,resole,reject
//(静态方法不需要实例)
// var p=new Promise(function(resolve,reject){
// reject('ok');
// });
// p.then(function(res){
// console.log(res)
// }).catch (function(res){
// console.log(res)
// }).finally(function(){
// console.log('我始终被执行')
// })




function run1(){
return new Promise(function(resolve,reject){
setTimeout(()=>{
var data='run1'
resolve(data)
},2000)
})
}
function run2(){
return new Promise(function(resolve,reject){
setTimeout(()=>{
var data='run2'
resolve(data)
},5000)
})
}


// var res1=run1()
// var res2=run2()

// res1.then(function(res){
// console.log(res)
// })
// res2.then(function(res){
// console.log(res)
// })

//并发执行,并且结果做成是一个数组
Promise.all([run1(),run2()]).then(function(res){
console.log(res)
})

//龟兔赛跑,兔子飞快
Promise.race([run1(),run2()]).then(function(res){
console.log(res)
})


//同步,代码是同步的,又希望getDataA返回的是一个promise对象
function getDataA(){
return Promise.resolve('ok1')
}
//同步
function getDataB(){
return Promise.resolve('ok2')
}

getDataA().then(function(res){
console.log(res)
})
getDataB().then(function(res){
console.log(res)
})
</script>

 

高阶函数

<script>

//原型: 每个函数自带的一个属性,属性名称叫做 prototype,
// 它的值是一个对象,让构造函数的属性和方法,进行共享
//减少内存的开销


// toString() 每个构造函数都有toString()方法
// Date.prototype.toString=function(){
// console.log("帅哥在台上");
// }

// var date = new Date();
// console.log(date);

// Array.prototype.toString=function(){
// console.log("222");
// }

// var arr=[11,22,33];
// console.log(arr.toString());


// console.log( Array.prototype);

// var arr1=[11,22,33];
// var arr2=[11,22,33];


// forEach,map,some,every,filter,reduce,sort

// console.log( Array.prototype.sort);
//1).forEach
Array.prototype.myforEach = function (callback) {
//this, 谁调用myforEach,this就是谁!
console.log(this);
for (var i = 0; i < this.length; i++) {
callback(this[i], i, this);
}
}
var arr1 = [1, 6, 3, 7, 9];
arr1.myforEach(function (item, index, arr) {
console.log(item, index, arr);
})
//2).map
Array.prototype.myMap = function (callback) {
var list = [];
for (var i = 0; i < this.length; i++) {
list.push(callback(this[i], i, this))
}
return list
}
var arr1 = [1, 6, 3, 7, 9];
var res = arr1.myMap(function (item, index, arr) {
return item * 10
})
console.log(res);
//3).你自己写一个mysort方法
Array.prototype.mySort = function (callback) {
for (var i = 0; i < this.length - 1; i++) {
for (var j = 0; j < this.length - 1 - i; j++) {
if (callback(this[j], this[j + 1]) >= 1) {
var temp = this[j + 1];
this[j + 1] = this[j];
this[j] = temp;
}
}
}
return this;
}
var arr1 = [1, 6, 3, 7, 9];
var res = arr1.mySort(function (a, b) {
return a - b;
})
console.log(res);
//4).filter
Array.prototype.myfilter = function (callback) {
var list = [];
for (var i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
list.push(this[i])
}
}
return list;
}
var arr1 = [1, 6, 3, 7, 9];
var res = arr1.myfilter(function (item, index, arr) {
return item > 5
})
console.log(res);
//5).some
Array.prototype.mySome = function (callback) {
for (var i = 0; i < this.length; i++) {
if (callback(this[i], i, this)) {
return true;
}
}
return false;
}
var arr1 = [1, 6, 3, 7, 9];
console.log(arr1.mySome((item, index, aaa) => {
return item > 2
}));
//6).every
Array.prototype.myevery = function (callback) {
var flag = true;
for (var i = 0; i < this.length; i++) {
if (!callback(this[i], i, this)) {
flag = false;
break;
}
}
return flag
}
var arr1 = [1, 6, 3, 7, 9];
console.log(arr1.myevery((item, index, aaa) => {
return item > 2
}));

 


//reduce
// Array.prototype.Myreduce = function(callback,f){
// var str
// if(f||''==f){
// str = f
// var i = 0
// }
// else{
// str = this[0]
// var i = 1
// }
// for(;i<this.length;i++){
// str = callback(str,this[i])
// }

// return str
// }

// console.log(arr1.Myreduce(function(pre,cur){
// return pre+cur
// },''));


//1

//var arr1 = [1, 6, 3, 7, 9];




Array.prototype.myreduce = function (callback, init) {
//如果一个参数,pre就是第一个数,下标从1开始
if (arguments.length == 1) {
var pre = this[0];
for (var i = 1; i < this.length; i++) {
var cur = this[i];
//把回调函数的返回值丢给下一次的pre
pre = callback(pre, cur, i, this);
}
return pre;
}
//如果2个参数,pre就是第初始值,下标从0开始
if (arguments.length == 2) {
var pre = init;
for (var i = 0; i < this.length; i++) {
var cur = this[i];
//把回调函数的返回值丢给下一次的pre
pre = callback(pre, cur, i, this);
}
return pre;
}

// var pre = arguments.length == 2 ? init : this[0];
// var i = arguments.length == 2 ? 0 : 1;
// for (; i < this.length; i++) {
// var cur = this[i];
// pre = callback(pre, cur, i, this);
// }
// return pre;
}


console.log("-----------------");
// var arr1 = [1, 6, 3, 7, 9];
// console.log(arr1);
// //1个参数 5个数 4次
arr1.myreduce(function (pre, cur, index, arr) {
// 1 6
// undefined 3

console.log(pre, cur, index);
})
console.log("-----------------");
// //2个参数 5个数 5次
arr1.myreduce(function (pre, cur, index, arr) {
console.log(pre, cur, index);
}, "你好")

标签:function,pre,console,函数,res,promise,var,高阶,log
来源: https://www.cnblogs.com/kakaya/p/16410838.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有