极富挑战性:终极挑战!2024年Web前端面试必问的JS问题都在这!
历史管理
window.location.hash:网址的后面添加的# 字符串 旧方法如:window.location.hash = num; 读取(会加1个#)、设置(会加1个#)
window.onhashchange改变hash值时触发事件
window.onpopstate : 改变hash值时触发事件
event.state; 历史管理中,当前hash值对应的存储数据
history.pushState(data,‘‘,网址后面加的字符串) 新方法 存储数据data,设置hash值(不包括#) 必须在服务器环境中,否则无效
参数1:存进历史管理的数据
参数2:标题;还未实现,直接用‘‘
参数3:可选参数,给网址后面加的字符串;给人网址变换的感觉;不添加时,网址不发生改变
网址时虚拟的,刷新时找不到页面
sessionStorage、localStorage:本地存储、本地会话
localStorage永久存储,关闭浏览器,本地存储都不会消失(只针对相同的浏览器) 能多个相同的页面共享数据sessionStorage临时存储,关闭浏览器,本地会话消失 不能多个相同的页面共享数据
必须是服务器环境,否则相关的事件无效
window.sessionStorage、window.localStorage:方法一样
注意:数据名称、数据具体值,必须加上引号,除非是变量,或者表达式,否则出错
window.localStorage.getItem(‘name‘):获取数据,通过key来获取到相应的value
window.localStorage.setItem(‘name‘,‘value‘):设置数据,keyvalue类型,类型都是字符串
window.localStorage.removeItem(‘name‘):删除数据,通过key来删除相应的value
window.localStorage.clear():删除全部存储的值
event事件
event事件的兼容 如:var ev = ev || event;event.currentTarget 事件绑定的元素
event.target 事件触发的元素,不一定是事件绑定的元素,可能是发生事件冒泡的下级元素
event.clientX / event.clientY : 鼠标到页面可视区(屏幕),左边/顶部的距离 (只有数字,没有单位)
event.pageX / event.pageY 到整个网页的值
event.stopPropagation() 阻止冒泡 标准浏览器
event.cancelBubble = true 阻止冒泡 只支持IE
event.stopImmediatePropagation() 阻止冒泡,阻止本身的事件(阻止在该语句之后的事件,之前的事件无法阻止) 标准浏览器
event.preventDefault(); 阻止默认
return false;阻止默认行为、阻止冒泡 只能阻止obj.on事件名称=fn 、attachEvent(IE)所触发的默认行为
event.which 键盘的键值、鼠标值 keydown、keyup、mousedown、mouseup事件中使用
鼠标左键、滚轮、鼠标右键分别对应1、2、3(测鼠值时必须使用mousedown、或者mouseup,否则出现问题)
event.ctrlKey 按ctr时,返回true,否则返回false
event.shiftKey 按shift时,返回true,否则返回false
event.keyCode 返回键值的编码值
原始js操作html元素
父级元素:元素.parentNode
子级元素:
元素.children
元素.firstElementChild || 元素.firstChild: (只读)第一个子节点
元素.lastElementChild || 元素.lastChild
兄弟元素:
元素.nextElementSibling || 元素.nextSibling (只读)下一个兄弟节点
元素.previousElementSibling || 元素.previousSibling (只读)上一个兄弟节点
删除、替换、插入元素:
父级.removeChild(要删除的元素); 删除子元素 (通过父级删除子集)
父级.replaceChild(新节点,被替换的子节点) 替换子节点
父级.appendChild(要添加的元素) 追加子元素
父级.insertBefore(新的元素,被插入的元素) 在指定子元素前面插入一个新元素
canvas绘图
var oc=document.querySelector(‘#c1‘);oGc=oc.getContext(“2d“); //必须设置绘制环境,否则绘制图案
context.toDataURL() 将canvas内的图像,转成img.src
context.downloadimage(ocanvas1,“png“); 下载图片
context.drawImage(img,x,y); 在画布上定位图像。复制图片、视频
context.drawImage(img,x,y,width,height); 在画布上定位图像,并规定图像的宽度和高度
context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 剪切图像,并在画布上定位被剪切的部分
context.getImageData():复制画布上指定矩形的像素数据,获取图像每个像素的数据
如果你的img_url和你的页面不是同源的,那么getImageData会导致错误
context.putImageData():将图像数据放回画布
前端数据存储有那些
url参数cookie
localStorage
sessionStorage
indexedDB
for in、for of的区别
for in总是得到对象的key或数组、字符串的下标for of总是得到对象的value或数组、字符串的值
null和undefined的区别?
Null访问一个不存在对象返回的值,表示空对象Undefined:访问一个未初始化变量(声明完没有赋值的变量)返回的值,表示空变量
document load 和document ready的区别
document.onload是在结构和样式,外部js以及图片加载完才执行jsdocument.ready是 dom 树创建完成就执行的方法,原生中没有这个方法,jquery中有$().ready(function)
手动实现 Object.assign
创建新对象,循环赋值打散合并在新的对象中
js中,数字形式的字符串和数字相加的规则
把数字和数字相加把字符串和字符串相加
所有其他类型的值都会被自动转换成这两种类型的值
console.log(-1 ‘5‘); // -15
console.log(1 ‘5‘); // 15
console.log(1 - ‘5‘); // -4
console.log(-1 - ‘5‘); // -6
高手必读:揭秘2024年不容错过的Web前端面试JS问题!
历史管理
window.location.hash:网址的后面添加的# 字符串 旧方法如:window.location.hash = num; 读取(会加1个#)、设置(会加1个#)
window.onhashchange改变hash值时触发事件
window.onpopstate : 改变hash值时触发事件
event.state; 历史管理中,当前hash值对应的存储数据
history.pushState(data,‘‘,网址后面加的字符串) 新方法 存储数据data,设置hash值(不包括#) 必须在服务器环境中,否则无效
参数1:存进历史管理的数据
参数2:标题;还未实现,直接用‘‘
参数3:可选参数,给网址后面加的字符串;给人网址变换的感觉;不添加时,网址不发生改变
网址时虚拟的,刷新时找不到页面
sessionStorage、localStorage:本地存储、本地会话
localStorage永久存储,关闭浏览器,本地存储都不会消失(只针对相同的浏览器) 能多个相同的页面共享数据sessionStorage临时存储,关闭浏览器,本地会话消失 不能多个相同的页面共享数据
必须是服务器环境,否则相关的事件无效
window.sessionStorage、window.localStorage:方法一样
注意:数据名称、数据具体值,必须加上引号,除非是变量,或者表达式,否则出错
window.localStorage.getItem(‘name‘):获取数据,通过key来获取到相应的value
window.localStorage.setItem(‘name‘,‘value‘):设置数据,keyvalue类型,类型都是字符串
window.localStorage.removeItem(‘name‘):删除数据,通过key来删除相应的value
window.localStorage.clear():删除全部存储的值
event事件
event事件的兼容 如:var ev = ev || event;event.currentTarget 事件绑定的元素
event.target 事件触发的元素,不一定是事件绑定的元素,可能是发生事件冒泡的下级元素
event.clientX / event.clientY : 鼠标到页面可视区(屏幕),左边/顶部的距离 (只有数字,没有单位)
event.pageX / event.pageY 到整个网页的值
event.stopPropagation() 阻止冒泡 标准浏览器
event.cancelBubble = true 阻止冒泡 只支持IE
event.stopImmediatePropagation() 阻止冒泡,阻止本身的事件(阻止在该语句之后的事件,之前的事件无法阻止) 标准浏览器
event.preventDefault(); 阻止默认
return false;阻止默认行为、阻止冒泡 只能阻止obj.on事件名称=fn 、attachEvent(IE)所触发的默认行为
event.which 键盘的键值、鼠标值 keydown、keyup、mousedown、mouseup事件中使用
鼠标左键、滚轮、鼠标右键分别对应1、2、3(测鼠值时必须使用mousedown、或者mouseup,否则出现问题)
event.ctrlKey 按ctr时,返回true,否则返回false
event.shiftKey 按shift时,返回true,否则返回false
event.keyCode 返回键值的编码值
原始js操作html元素
父级元素:元素.parentNode
子级元素:
元素.children
元素.firstElementChild || 元素.firstChild: (只读)第一个子节点
元素.lastElementChild || 元素.lastChild
兄弟元素:
元素.nextElementSibling || 元素.nextSibling (只读)下一个兄弟节点
元素.previousElementSibling || 元素.previousSibling (只读)上一个兄弟节点
删除、替换、插入元素:
父级.removeChild(要删除的元素); 删除子元素 (通过父级删除子集)
父级.replaceChild(新节点,被替换的子节点) 替换子节点
父级.appendChild(要添加的元素) 追加子元素
父级.insertBefore(新的元素,被插入的元素) 在指定子元素前面插入一个新元素
canvas绘图
var oc=document.querySelector(‘#c1‘);oGc=oc.getContext(“2d“); //必须设置绘制环境,否则绘制图案
context.toDataURL() 将canvas内的图像,转成img.src
context.downloadimage(ocanvas1,“png“); 下载图片
context.drawImage(img,x,y); 在画布上定位图像。复制图片、视频
context.drawImage(img,x,y,width,height); 在画布上定位图像,并规定图像的宽度和高度
context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 剪切图像,并在画布上定位被剪切的部分
context.getImageData():复制画布上指定矩形的像素数据,获取图像每个像素的数据
如果你的img_url和你的页面不是同源的,那么getImageData会导致错误
context.putImageData():将图像数据放回画布
前端数据存储有那些
url参数cookie
localStorage
sessionStorage
indexedDB
().attr与().prop()的区别?
对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
null和undefined的区别?
Null访问一个不存在对象返回的值,表示空对象Undefined:访问一个未初始化变量(声明完没有赋值的变量)返回的值,表示空变量
document load 和document ready的区别
document.onload是在结构和样式,外部js以及图片加载完才执行jsdocument.ready是 dom 树创建完成就执行的方法,原生中没有这个方法,jquery中有$().ready(function)
js中,数字形式的字符串和数字相加的规则
把数字和数字相加把字符串和字符串相加
所有其他类型的值都会被自动转换成这两种类型的值
console.log(-1 ‘5‘); // -15
console.log(1 ‘5‘); // 15
console.log(1 - ‘5‘); // -4
console.log(-1 - ‘5‘); // -6
手动实现 Object.assign
创建新对象,循环赋值打散合并在新的对象中
强化技能:未来一年, 10个让你持续成长的Web前端面试常温JS问题!
历史管理
window.location.hash:网址的后面添加的# 字符串 旧方法如:window.location.hash = num; 读取(会加1个#)、设置(会加1个#)
window.onhashchange改变hash值时触发事件
window.onpopstate : 改变hash值时触发事件
event.state; 历史管理中,当前hash值对应的存储数据
history.pushState(data,‘‘,网址后面加的字符串) 新方法 存储数据data,设置hash值(不包括#) 必须在服务器环境中,否则无效
参数1:存进历史管理的数据
参数2:标题;还未实现,直接用‘‘
参数3:可选参数,给网址后面加的字符串;给人网址变换的感觉;不添加时,网址不发生改变
网址时虚拟的,刷新时找不到页面
sessionStorage、localStorage:本地存储、本地会话
localStorage永久存储,关闭浏览器,本地存储都不会消失(只针对相同的浏览器) 能多个相同的页面共享数据sessionStorage临时存储,关闭浏览器,本地会话消失 不能多个相同的页面共享数据
必须是服务器环境,否则相关的事件无效
window.sessionStorage、window.localStorage:方法一样
注意:数据名称、数据具体值,必须加上引号,除非是变量,或者表达式,否则出错
window.localStorage.getItem(‘name‘):获取数据,通过key来获取到相应的value
window.localStorage.setItem(‘name‘,‘value‘):设置数据,keyvalue类型,类型都是字符串
window.localStorage.removeItem(‘name‘):删除数据,通过key来删除相应的value
window.localStorage.clear():删除全部存储的值
event事件
event事件的兼容 如:var ev = ev || event;event.currentTarget 事件绑定的元素
event.target 事件触发的元素,不一定是事件绑定的元素,可能是发生事件冒泡的下级元素
event.clientX / event.clientY : 鼠标到页面可视区(屏幕),左边/顶部的距离 (只有数字,没有单位)
event.pageX / event.pageY 到整个网页的值
event.stopPropagation() 阻止冒泡 标准浏览器
event.cancelBubble = true 阻止冒泡 只支持IE
event.stopImmediatePropagation() 阻止冒泡,阻止本身的事件(阻止在该语句之后的事件,之前的事件无法阻止) 标准浏览器
event.preventDefault(); 阻止默认
return false;阻止默认行为、阻止冒泡 只能阻止obj.on事件名称=fn 、attachEvent(IE)所触发的默认行为
event.which 键盘的键值、鼠标值 keydown、keyup、mousedown、mouseup事件中使用
鼠标左键、滚轮、鼠标右键分别对应1、2、3(测鼠值时必须使用mousedown、或者mouseup,否则出现问题)
event.ctrlKey 按ctr时,返回true,否则返回false
event.shiftKey 按shift时,返回true,否则返回false
event.keyCode 返回键值的编码值
原始js操作html元素
父级元素:元素.parentNode
子级元素:
元素.children
元素.firstElementChild || 元素.firstChild: (只读)第一个子节点
元素.lastElementChild || 元素.lastChild
兄弟元素:
元素.nextElementSibling || 元素.nextSibling (只读)下一个兄弟节点
元素.previousElementSibling || 元素.previousSibling (只读)上一个兄弟节点
删除、替换、插入元素:
父级.removeChild(要删除的元素); 删除子元素 (通过父级删除子集)
父级.replaceChild(新节点,被替换的子节点) 替换子节点
父级.appendChild(要添加的元素) 追加子元素
父级.insertBefore(新的元素,被插入的元素) 在指定子元素前面插入一个新元素
canvas绘图
var oc=document.querySelector(‘#c1‘);oGc=oc.getContext(“2d“); //必须设置绘制环境,否则绘制图案
context.toDataURL() 将canvas内的图像,转成img.src
context.downloadimage(ocanvas1,“png“); 下载图片
context.drawImage(img,x,y); 在画布上定位图像。复制图片、视频
context.drawImage(img,x,y,width,height); 在画布上定位图像,并规定图像的宽度和高度
context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 剪切图像,并在画布上定位被剪切的部分
context.getImageData():复制画布上指定矩形的像素数据,获取图像每个像素的数据
如果你的img_url和你的页面不是同源的,那么getImageData会导致错误
context.putImageData():将图像数据放回画布
前端数据存储有那些
url参数cookie
localStorage
sessionStorage
indexedDB
().attr与().prop()的区别?
对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
null和undefined的区别?
Null访问一个不存在对象返回的值,表示空对象Undefined:访问一个未初始化变量(声明完没有赋值的变量)返回的值,表示空变量
document load 和document ready的区别
document.onload是在结构和样式,外部js以及图片加载完才执行jsdocument.ready是 dom 树创建完成就执行的方法,原生中没有这个方法,jquery中有$().ready(function)
手动实现 Object.assign
创建新对象,循环赋值打散合并在新的对象中
js中,数字形式的字符串和数字相加的规则
把数字和数字相加把字符串和字符串相加
所有其他类型的值都会被自动转换成这两种类型的值
console.log(-1 ‘5‘); // -15
console.log(1 ‘5‘); // 15
console.log(1 - ‘5‘); // -4
console.log(-1 - ‘5‘); // -6
脑洞大开:你能答对这10个2024年Web前端面试常温JS问题吗?
历史管理
window.location.hash:网址的后面添加的# 字符串 旧方法如:window.location.hash = num; 读取(会加1个#)、设置(会加1个#)
window.onhashchange改变hash值时触发事件
window.onpopstate : 改变hash值时触发事件
event.state; 历史管理中,当前hash值对应的存储数据
history.pushState(data,‘‘,网址后面加的字符串) 新方法 存储数据data,设置hash值(不包括#) 必须在服务器环境中,否则无效
参数1:存进历史管理的数据
参数2:标题;还未实现,直接用‘‘
参数3:可选参数,给网址后面加的字符串;给人网址变换的感觉;不添加时,网址不发生改变
网址时虚拟的,刷新时找不到页面
sessionStorage、localStorage:本地存储、本地会话
localStorage永久存储,关闭浏览器,本地存储都不会消失(只针对相同的浏览器) 能多个相同的页面共享数据sessionStorage临时存储,关闭浏览器,本地会话消失 不能多个相同的页面共享数据
必须是服务器环境,否则相关的事件无效
window.sessionStorage、window.localStorage:方法一样
注意:数据名称、数据具体值,必须加上引号,除非是变量,或者表达式,否则出错
window.localStorage.getItem(‘name‘):获取数据,通过key来获取到相应的value
window.localStorage.setItem(‘name‘,‘value‘):设置数据,keyvalue类型,类型都是字符串
window.localStorage.removeItem(‘name‘):删除数据,通过key来删除相应的value
window.localStorage.clear():删除全部存储的值
event事件
event事件的兼容 如:var ev = ev || event;event.currentTarget 事件绑定的元素
event.target 事件触发的元素,不一定是事件绑定的元素,可能是发生事件冒泡的下级元素
event.clientX / event.clientY : 鼠标到页面可视区(屏幕),左边/顶部的距离 (只有数字,没有单位)
event.pageX / event.pageY 到整个网页的值
event.stopPropagation() 阻止冒泡 标准浏览器
event.cancelBubble = true 阻止冒泡 只支持IE
event.stopImmediatePropagation() 阻止冒泡,阻止本身的事件(阻止在该语句之后的事件,之前的事件无法阻止) 标准浏览器
event.preventDefault(); 阻止默认
return false;阻止默认行为、阻止冒泡 只能阻止obj.on事件名称=fn 、attachEvent(IE)所触发的默认行为
event.which 键盘的键值、鼠标值 keydown、keyup、mousedown、mouseup事件中使用
鼠标左键、滚轮、鼠标右键分别对应1、2、3(测鼠值时必须使用mousedown、或者mouseup,否则出现问题)
event.ctrlKey 按ctr时,返回true,否则返回false
event.shiftKey 按shift时,返回true,否则返回false
event.keyCode 返回键值的编码值
原始js操作html元素
父级元素:元素.parentNode
子级元素:
元素.children
元素.firstElementChild || 元素.firstChild: (只读)第一个子节点
元素.lastElementChild || 元素.lastChild
兄弟元素:
元素.nextElementSibling || 元素.nextSibling (只读)下一个兄弟节点
元素.previousElementSibling || 元素.previousSibling (只读)上一个兄弟节点
删除、替换、插入元素:
父级.removeChild(要删除的元素); 删除子元素 (通过父级删除子集)
父级.replaceChild(新节点,被替换的子节点) 替换子节点
父级.appendChild(要添加的元素) 追加子元素
父级.insertBefore(新的元素,被插入的元素) 在指定子元素前面插入一个新元素
canvas绘图
var oc=document.querySelector(‘#c1‘);oGc=oc.getContext(“2d“); //必须设置绘制环境,否则绘制图案
context.toDataURL() 将canvas内的图像,转成img.src
context.downloadimage(ocanvas1,“png“); 下载图片
context.drawImage(img,x,y); 在画布上定位图像。复制图片、视频
context.drawImage(img,x,y,width,height); 在画布上定位图像,并规定图像的宽度和高度
context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 剪切图像,并在画布上定位被剪切的部分
context.getImageData():复制画布上指定矩形的像素数据,获取图像每个像素的数据
如果你的img_url和你的页面不是同源的,那么getImageData会导致错误
context.putImageData():将图像数据放回画布
for in、for of的区别
for in总是得到对象的key或数组、字符串的下标for of总是得到对象的value或数组、字符串的值
().attr与().prop()的区别?
对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。
null和undefined的区别?
Null访问一个不存在对象返回的值,表示空对象Undefined:访问一个未初始化变量(声明完没有赋值的变量)返回的值,表示空变量
document load 和document ready的区别
document.onload是在结构和样式,外部js以及图片加载完才执行jsdocument.ready是 dom 树创建完成就执行的方法,原生中没有这个方法,jquery中有$().ready(function)
js中,数字形式的字符串和数字相加的规则
把数字和数字相加把字符串和字符串相加
所有其他类型的值都会被自动转换成这两种类型的值
console.log(-1 ‘5‘); // -15
console.log(1 ‘5‘); // 15
console.log(1 - ‘5‘); // -4
console.log(-1 - ‘5‘); // -6
手动实现 Object.assign
创建新对象,循环赋值打散合并在新的对象中
悬念揭秘:揭开JavaScript中的同步、异步究竟是什么?
同步、异步
异步(async),非阻塞setTimeout()、setInterval()、ajax、for循环
同步,阻塞
for循环和setTimeout案例
var i=0;for( var i=0;i<5;i ){
setTimeout(function(){
console.log(i);
},2000);
}
for循环是同步的,setTimeout()是异步的,最终输出5个5
如何输出0-4
方法一:将setimeout写成函数,传入一个参数k(等于i的值),再输出k
方法二:使用let定义变量,因为它有块级作用域
promise
一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)async fn(onoff) {
return new Promise((resolve, reject) => {
if( onoff ){
resolve({ name:‘liu‘ }); // 成功return返回的值,对应then(res)中的res
}
else{
reject(‘‘); // 失败
}
});
},
//async:定义异步函数 awaiting:同步执行
Promise.all()、Promise.race()
Promise.all()可以将多个实例组装个成一个新实例,成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。
Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。
一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。
换个视角:探索JavaScript中同步与异步的绝佳之处!
同步、异步
异步(async),非阻塞setTimeout()、setInterval()、ajax、for循环
同步,阻塞
for循环和setTimeout案例
var i=0;for( var i=0;i<5;i ){
setTimeout(function(){
console.log(i);
},2000);
}
for循环是同步的,setTimeout()是异步的,最终输出5个5
如何输出0-4
方法一:将setimeout写成函数,传入一个参数k(等于i的值),再输出k
方法二:使用let定义变量,因为它有块级作用域
promise
一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)async fn(onoff) {
return new Promise((resolve, reject) => {
if( onoff ){
resolve({ name:‘liu‘ }); // 成功return返回的值,对应then(res)中的res
}
else{
reject(‘‘); // 失败
}
});
},
//async:定义异步函数 awaiting:同步执行
Promise.all()、Promise.race()
Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。
Promise.all()可以将多个实例组装个成一个新实例,
成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。
困惑解析:摸清JavaScript种的10种同步、异步神秘模式!
同步、异步
异步(async),非阻塞setTimeout()、setInterval()、ajax、for循环
同步,阻塞
for循环和setTimeout案例
var i=0;for( var i=0;i<5;i ){
setTimeout(function(){
console.log(i);
},2000);
}
for循环是同步的,setTimeout()是异步的,最终输出5个5
如何输出0-4
方法一:将setimeout写成函数,传入一个参数k(等于i的值),再输出k
方法二:使用let定义变量,因为它有块级作用域
promise
async fn(onoff) {return new Promise((resolve, reject) => {
if( onoff ){
resolve({ name:‘liu‘ }); // 成功return返回的值,对应then(res)中的res
}
else{
reject(‘‘); // 失败
}
});
},
//async:定义异步函数 awaiting:同步执行
一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)
Promise.all()、Promise.race()
Promise.all()可以将多个实例组装个成一个新实例,成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。
Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。
一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。
等待算什么:发现10个彻底颠覆你对JavaScript同步、异步的观念!
同步、异步
异步(async),非阻塞setTimeout()、setInterval()、ajax、for循环
同步,阻塞
for循环和setTimeout案例
如何输出0-4方法一:将setimeout写成函数,传入一个参数k(等于i的值),再输出k
方法二:使用let定义变量,因为它有块级作用域
var i=0;
for( var i=0;i<5;i ){
setTimeout(function(){
console.log(i);
},2000);
}
for循环是同步的,setTimeout()是异步的,最终输出5个5
promise
一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)async fn(onoff) {
return new Promise((resolve, reject) => {
if( onoff ){
resolve({ name:‘liu‘ }); // 成功return返回的值,对应then(res)中的res
}
else{
reject(‘‘); // 失败
}
});
},
//async:定义异步函数 awaiting:同步执行
Promise.all()、Promise.race()
Promise.all()可以将多个实例组装个成一个新实例,成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。
Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。
一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。
超级便签:掌握JavaScript中异步操作10条实用备忘录!
同步、异步
异步(async),非阻塞setTimeout()、setInterval()、ajax、for循环
同步,阻塞
for循环和setTimeout案例
如何输出0-4方法一:将setimeout写成函数,传入一个参数k(等于i的值),再输出k
方法二:使用let定义变量,因为它有块级作用域
var i=0;
for( var i=0;i<5;i ){
setTimeout(function(){
console.log(i);
},2000);
}
for循环是同步的,setTimeout()是异步的,最终输出5个5
promise
一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)async fn(onoff) {
return new Promise((resolve, reject) => {
if( onoff ){
resolve({ name:‘liu‘ }); // 成功return返回的值,对应then(res)中的res
}
else{
reject(‘‘); // 失败
}
});
},
//async:定义异步函数 awaiting:同步执行
Promise.all()、Promise.race()
Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。
Promise.all()可以将多个实例组装个成一个新实例,
成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。
追逐时空:探索JavaScript中同步、异步的10种迷人魔力!
同步、异步
异步(async),非阻塞setTimeout()、setInterval()、ajax、for循环
同步,阻塞
for循环和setTimeout案例
如何输出0-4方法一:将setimeout写成函数,传入一个参数k(等于i的值),再输出k
方法二:使用let定义变量,因为它有块级作用域
var i=0;
for( var i=0;i<5;i ){
setTimeout(function(){
console.log(i);
},2000);
}
for循环是同步的,setTimeout()是异步的,最终输出5个5
promise
async fn(onoff) {return new Promise((resolve, reject) => {
if( onoff ){
resolve({ name:‘liu‘ }); // 成功return返回的值,对应then(res)中的res
}
else{
reject(‘‘); // 失败
}
});
},
//async:定义异步函数 awaiting:同步执行
一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)
Promise.all()、Promise.race()
Promise.all()可以将多个实例组装个成一个新实例,成功的时候返回一个成功的数组;失败的时候则返回最先被reject失败状态的值。
适用场景:比如当一个页面需要在很多个模块的数据都返回回来时才正常显示,否则loading。
promise.all中的子任务是并发执行的,适用于前后没有依赖关系的。
Promise.race()意为赛跑的意思,也就是数组中的任务哪个获取的块,就返回哪个,不管结果本身是成功还是失败。
一般用于和定时器绑定,比如将一个请求和三秒的定时器包装成Promise实例,加入到Promise队列中,请求三秒中还没有回应时,给用户一些提示或相应的操作。