美文网首页
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