1) for循环setTimeout500ms打印出1-5
考察闭包结合异步
- 第一种方式用let
for(let i=0; i< 6; i++){
setTimeout(function(){console.log(i)},500)
}
- 第二种用闭包
for(var i=0; i< 6; i++){
var a = function(){
var j = i;
setTimeout(function(){console.log(j)},500)
}
a()
}
for (var i = 1; i< 6; i ++) {
(function(i) {
setTimeout(function () {
console.log(i)
}, 500 )
})(i)
}
- 第三种promise
for(var i=1;i<6;i++){
new Promise((resolve,reject)=>{
setTimeout(resolve,500,i);
}).then(i=>console.log(i))
}
2) vue和Jq的区别
- vue: 数据驱动渲染页面,不需要操作具体的dom,页面与js耦合性弱,易于维护
- jQuery首先要获取到dom对象,然后对dom对象进行进行值的修改等操作
3) 数据类型有哪些
共七种数据类型:
5种为基本类型null,string,boolean,undefined,number
Object
为引用类型,
Symbol
是新出来的特殊数据类型,可以传入值或者对象且唯一!
4) 是否了解解构赋值
使用数组或者对象的形式对给定的变量进行赋值
let [a,b,c] = [1,2,3];//右边的给左边
let {a,b,c}={a: 12, b: 5, c: 8};
5) require和import有什么不同
- import用于引入外部模块。
- require不仅可以引用文件和模块,而且使用位置不受限制,可以在代码中使用
6) apply和call可以做什么?有什么区别
改变this指向。两者作用基本一致,区别在于接收参数的方式不一样
- apply:最多只能有两个参数——新this对象和一个数组argArray
- call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。
7) html5和css3有哪些新增特性
- html5:音频,视频,canvas,svg,等多的语义化标签等
- css3:圆角,动画,滤镜,transform等
8)JS简单的模拟bind
Function.prototype.testBind = function (context) {
var self = this;
return function () {
return self.apply(context);
}
}
----------------------------------------------------------------------------
Function.prototype.testBind= function(that){
var _this = this,
/*
*由于参数的不确定性,统一用arguments来处理,这里的arguments只是一个类数组对象,有length属性
*可以用数组的slice方法转化成标准格式数组,除了作用域对象that以外,
*后面的所有参数都需要作为数组参数传递
*Array.prototype.slice.apply(arguments,[1])/Array.prototype.slice.call(arguments,1)
*/
slice = Array.prototype.slice,
args = slice.apply(arguments,[1]);
//返回函数
return function(){
//apply绑定作用域,进行参数传递
return _this.apply(that,args)
}
}
9)描述下cookie,sessionStorage,localSotrage的差异..
- cookie : 大小4KB 左右,跟随请求(请求头),会占用带宽资源,但是若是用来判断用户是否在线这些挺方便
- sessionStorage和localStorage大同小异,大小看浏览器支持,一般为5MB,数据只保留在本地,不参与服务端交互.
- sessionStorage的生存周期只限于会话中,关闭了储存的数据就没了.
- localStorage则保留在本地,没有人为清除会一直保留