• 【JS】--易错题、面试题归档


    普通函数和箭头函数的区别

    • 箭头函数不能作构造函数。
    • 箭头函数没有argument参数。如果你想访问箭头函数的直接参数,可以使用剩余参数 ...args,剩余参数 ... args 接受箭头函数的执行参数
    • 箭头函数没有自己的This.指向,箭头函数内部的 this 值始终等于外部函数的 this值。换句话说,箭头函数可按词法解析 this,箭头函数没有定义自己的执行上下文。
    • 常规函数如果缺少 return 语句,或者 return 语句后面没有表达式,则常规函数隐式返回undefined
      如果箭头函数包含一个表达式,而你省略了该函数的花括号,则将显式返回该表达式。这些是内联箭头函数

    This指向问题

    • this是声明函数时附加的参数,指向特定的对象,也就是隐藏参数。

    • this提供了一种更加优雅的方式来隐式的传递对象引用。

    • this永远指向调用他的对象

      一个测试题

    var length = 10;
    function fn() {
        console.log(this.length);
    }
     
    var obj = {
      length: 5,
      method: function(fn) {
        fn();
        arguments[0]();
      }
    };
     
    obj.method(fn, 1);//输出是什么?
    

    只要认准 this永远指向调用他的对象,这道题就很简单了
    在执行 obj.method()时,如果函数内部执行console.log(this.length),函数的调用对象为obj,this指向obj,但是method()内部执行的是fn()函数,而fn()函数的调用对象为window,即window.fn(),即this指向window,输出为 10;
    参数fn1属于arguments类数组对象,arguments[0]()就是调用了fn(),此时fn的作用域为arguments,即this指向argumentsthis.length即传入的参数的长度2
    结果输出为 10,2

    闭包和自执行参数

    var test = function(a){
        this.a = a;
        return function(b){
            return this.a + b;
        }
    }(function(a,b){
        return a;
    }(1,2))
    test(4)
    

    解析

    var test = function(a){
        this.a = a;  // this指向window
        return function(b){
            return this.a + b;
        }
    }
    var getA = function(a,b){
        return a;
    }(1,2)   //自执行函数 返回1,b没有用到
    即:  
    test(getA)(4)  // test(1)(4)
    test(1) 返回函数
    function(b){
        return this.a+b
    }
    此时 a 为 1 
    
    很明显 最后返回 1+4 结果为 5
    
  • 相关阅读:
    .net remoting 事件调用循环处理中重复返回的问题.
    MySQL5.7.29winx64解压缩版安装
    IntelliJ IDEA下SVN的配置及使用说明
    navicat12.0.26如何激活
    sql优化的几种方式
    mysql导入文件出现Data truncated for column 'xxx' at row 1的原因
    MessageFormat.format()用法
    idea提交svn不显示新建文件
    后端Long类型传到前端精度丢失的正确解决方式
    在IDEA中的cannot_resolve_method解决方法
  • 原文地址:https://www.cnblogs.com/asenper/p/13046913.html
Copyright © 2020-2023  润新知