美文网首页
JS面试常见问题汇总

JS面试常见问题汇总

作者: 暴走的毛驴 | 来源:发表于2020-02-24 19:31 被阅读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、箭头函数和普通函数的区别?

    • this
      箭头函数没有this,它的this是继承来的,默认指向定义它的时候的对象
      普通函数指向的是它的直接调用者。没找到直接调用者,则this指向 window
    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。

    • 箭头函数是匿名函数,不能作为构造函数,不能使用new
    • 没有原型prototype
    • 不可以使用arguments对象

    相关文章

      网友评论

          本文标题:JS面试常见问题汇总

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