JS面试常见问题汇总

2020-02-24  本文已影响0人  暴走的毛驴

1、闭包

闭包就是可以访问另一个函数作用域中的变量的函数。

闭包的作用域链包含着它自己的作用域,以及包含它的函数的作用域和全局作用域。
通常,函数的作用域及其所有变量都会在函数执行结束后被销毁。但是,在创建了一个闭包以后,这个函数的作用域就会一直保存到闭包不存在为止

function fun(){
  var a = 1;
  return function(){
    return a;
  }
}
var m = fun();
console.log(m()); // 1

外部函数调用之后其变量对象本应该被销毁,但闭包的存在使我们仍然可以访问外部函数的变量对象

function fun(){
  var arr = [];
  for(var i=1;i<10;i++){
    arr[i] = function(){
      return i;
    }
  }
   return arr;
}

arr数组中包含了10个匿名函数,每个匿名函数都能访问外部函数的变量i,i=10


2、箭头函数和普通函数的区别?

let obj = {
        a: 1,
        b: () => {
            console.log(this.a); // undefined
        },
        c: function() {
            console.log(this.a); // 1 
        },
    };
obj.b();
obj.c();

这里通过obj.b(),此时this指向的window对象,上面没有a,所以返回undefined。通过obj.c(),this指向的是它的直接调用者,就是obj,所以返回1。

上一篇下一篇

猜你喜欢

热点阅读