美文网首页
2018-04-26 总结

2018-04-26 总结

作者: 范晓坤 | 来源:发表于2018-04-26 17:04 被阅读0次

    1.考察对内存空间理解

    let a = {v:'temp'};
    let b =a;
    a=a.x={v:'temp'};
    console.log(a);
    //a: {v:'temp'}
    console.log(b);
    //b:{v:'temp',x:{v:'temp'}}
    

    2.考察对函数传参的理解

    let a =1;
    let b ={a:1};
    function sum(m,n){
       m=2;
       n.a=2;
    }
    sum(a,b);
    console.log(a,b);
    //1,{a:2}
    

    3.考察js事件循环机制

    setTimeout(function(){console.log(0)},0);
    Promise.resolve().then(function(){console.log(5)});
    console.log(3);
    for(var i=1-;i<15;i++){
      setTimeout(function(){console.log(i)},i);
    }
    //3,5,0,15,15,15,15,15
    

    4.

    (function(num){
      console.log(num);
      var num =10;
    }(100));
    //100
    

    5.

    (function(num){
      console.log(num);
      var num=10;
     function num(){};
    }(100));
    //function num(){};
    

    6.

    var num=100;
    var obj={
      num:200,
      inner:{
        num:300,
        print:function(){
          console.log(this.num);
        }
      }
    };
    obj.inner.print();//300
    var func = obj.inner.print;
    func();//100
    (obj.inner.print)();//300
    (obj.inner.print=obj.inner.print)();//100
    

    7.实现add(1)(2)输出3,考察闭包的实现

    function add(x){
      var sum =x;
      return function(y){
        return sum +=y;
      }
    }
    

    8.拓展第7题,实现add(1)=>1,add(1)(2)=>3,add(1)(2)(3)=>6等

    function add(x) {
        var sum = x;
        var tmp = function (y) {
            sum = sum + y;
            return tmp;
        };
        tmp.toString = function () {
            return sum;
        };
        return tmp;
    }
    console.log(add(1)(2)(3));  //6
    console.log(add(1)(2)(3)(4));   //10
    //并没有看懂等着hexuebin给我讲呢
    

    9.数组排序

    var a =[1,10,4,6,11,33,55];
    a.sort(function(a,b){
      return a-b;
    })
    

    10.数组乱序

    var a= [1,2,3,4,5,6,7,8];
    a.sort(function(a,b){
      var sign = 1;
      sign = (Math.random()>0.5)?1:-1;
      return(a-b)*sign;
    })
    

    11.箭头函数的注意点

    (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

    (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

    (3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。

    (4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
    下面对(1)做出解释:

    function foo() {
      setTimeout(() => {
        console.log('id:', this.id);
      }, 100);
    }
    var id = 21;
    foo.call({ id: 42 });
    

    如果是普通函数,执行时this应该指向全局对象window,这时应该输出21。但是,箭头函数导致this总是指向函数定义生效时所在的对象(本例是{id: 42}),所以输出的是42。

    12.有1到n连续的n个数,打乱其顺序,随意拿走一个数,判断出拿走的是哪个数

    利用数组的find方法
    先把1到n个数转为数组a
    a.find(function(value,key){
      if(value - a[key+1] ==-2){
        return true;
      }
    });
    此时返回的值+1就是拿走的那个值
    

    13.怎么判断块级作用域

    任何一对花括号中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域

    14.块级作用域和函数声明提升的问题

    function functions(flag) {
        if (flag) {
          function getValue() { return 'a'; }
        } else {
          function getValue() { return 'b'; }
        }
     
        return getValue();
    }
    console.log(function functions(true));
    //答案是b
    

    分析如下:因为在js是没有块级作用域的,又因为函数声明提升的原因,上面的这段代码变相当于:

    function functions(flag) {
        function getValue() { return 'a'; };
        function getValue() { return 'b'; }
        if (flag) {
        } else {
        }
        return getValue();
    }
    console.log(function functions(true));
    //因此无论flag为何值,返回的方法始终为重写后的方法。
    

    那么怎么才能解决这个问题呢...

    function functions(flag) {
        if (flag) {
          var getValue = function () { return 'a'; }
        } else {
          var getValue = function () { return 'b'; }
        }
        return getValue();
    }
    

    不再用函数声明,而是用函数表达式的方法,因为函数表达式不会提升,因此只有当逻辑只想到这儿的时候才会执行。所以就解决问题啦。

    15.Promise有自身有哪几种方法

    Promise.all(),Promise.race(),Promise.resolve(),Promise.reject(),
    详情见:http://es6.ruanyifeng.com/#docs/promise

    凡普金科和闪银奇异

    相关文章

      网友评论

          本文标题:2018-04-26 总结

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