美文网首页
2018-11-08

2018-11-08

作者: xpwei | 来源:发表于2018-11-08 23:08 被阅读18次

☞ 考查闭包

for(var i=0;i<5;i++){
    setTimeout(function(){
        console.log(i);
    },1000);
}
console.log("hello",i);
//打印
//hello 5
//5个5

☞ 考查同步异步

(function(){
    console.log(1);
    new Promise(resolve=>{
        console.log(2);
        resolve(2)
    }).then(data=>{
        console.log(data);
    })
    setTimeout(function(){
        console.log(3);
    },1000);
    setTimeout(function(){
        console.log(4);
    },0);
    console.log(5);
})()
//打印
//1,2,5,2,4,3

var a={};
var b={key:'bb'};
var c={key:'cc'};
a[b]=44;
a[c]=55;
console.log(a[b]);
//打印
//55

☞ JavaScript两个变量交换值(不使用临时变量)

var a = 1,
    b = 2;

a = [a, b];
b = a[0];
a = a[1];

☞ 设置一个时间为10s,要求每秒打印出剩下的时间

(function(){
    var time=10000;
    var timer=setInterval(function(){
        time-=1000;
        if(time==0){
            clearInterval(timer);
        }else{
            console.log(time);
        }
    },1000);
})()

☞ 输出2的n次方

function pow(num, pow) {
    var re = 1;
    for (var i = 0; i < pow; i++) {
        re *= num;
    }
    console.log(re);
}
pow(2, 5);

且慢,还要考虑n是无穷大的时候,超出了计算机的计算范围呢?

☞ 考查this

var a={
    foo:"foo",
    fn:function(){
        var self=this;
        return function(){
            console.log("1",self.foo);
            console.log("2",this.foo);
        }
        ((function(){
            console.log("3",self.foo);
            console.log("4",this.foo);
        })())
    }
}
a.fn();
//打印
3 foo
4 undefined
1 foo
2 undefined

☞ https的原理

https://www.cnblogs.com/zhangshitong/p/6478721.html

☞ 用js实现深拷贝

https://www.jb51.net/article/99013.htm


此时,cc的高度是150,如果将aa的position改为absolute,则cc的高度为50,因为absolute脱离了文档流。

☞ :key的作用

key 的特殊属性主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试修复/再利用相同类型元素的算法。使用 key,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。

☞ 为什么在vue的组件中,data要用function返回对象呢?

当一个组件被定义, data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!通过提供 data 函数,每次创建一个新实例后,我们能够调用 data 函数,从而返回初始数据的一个全新副本数据对象。

其实也很好理解,大概意思就是:

类比与引用数据类型。如果不用function return 每个组件的data都是内存的同一个地址,那一个数据改变其他也改变了,这当然就不是我们想要的。用function return 其实就相当于申明了新的变量,相互独立,自然就不会有这样的问题;js在赋值object对象时,是直接一个相同的内存地址。所以为了每个组件的data独立,采用了这种方式。
如果不是组件的话,正常data的写法可以直接写一个对象,比如data:{ msg : ' 下载 ' },但由于组件是会在多个地方引用
的,JS中直接共享对象会造成引用传递,也就是说修改了msg后所有按钮的msg都会跟着修改,所以这里用function来每次返回一个
对象实例。

☞ position的几个取值

☞ Promise

var p = new Promise((resolve, reject) => {
    console.log(1);
    resolve(2);
    console.log(3);
});
p.then(res => {
    console.log(res);
    new Promise((resolve, reject) => {
        console.log(4)
    });
    console.log(5);
});
setTimeout(function () {
    console.log(6);
}, 0);
// 1
// 3
// 2
// 4
// 5
// 6

☞let的暂时性死区

let a = 2;
if (true) {
    console.log(a);
    let a = 3;
}
//报错
let a = 2;
if (true) {
    let a = 3;
    console.log(a);
}
//3

关于let暂时性死区可参考

相关文章

网友评论

      本文标题:2018-11-08

      本文链接:https://www.haomeiwen.com/subject/pougxqtx.html