• function 与 => 的区别


    在JS中,箭头函数并不是简单的function(){}匿名函数的简写语法糖,实际上,箭头函数和匿名函数有个明显的区别:箭头函数内部的this是词法作用域,在编写函数时就已经确定了。而匿名函数的this指向运行时实际调用该方法的对象,无法在编写函数时确定。

    我们看一下下面的例子:

    function Test() {
        this.num = 100;
    
        this.func = function(){
            console.log(this.num); // 100
            setTimeout(function(){
                console.log(this.num); // undefined
            }, 500);
        };
    }
    
    var obj = new Test();
    obj.func();
    

    这里的方法里调用了setTimeout函数,该函数500毫秒后调用我们定义的函数时,实际上是window对象调用的,所以这时匿名函数的this是指向window而不是指向obj了。

    在箭头函数出现之前一般都是这么写的:

    function Test() {
        this.num = 100;
    
        this.func = function(){
            console.log(this.num); // 100
            var that = this;
            setTimeout(function(){
                console.log(that.num); // 100
            }, 500);
        };
    }
    
    var obj = new Test();
    obj.func();
    

    这是利用了闭包的概念。箭头函数可以看做这种方式的语法糖。

    如下:

    function Test() {
        this.num = 100;
    
        this.func = function(){
            console.log(this.num); // 100
            setTimeout(() => {
                console.log(this.num); // 100
            }, 500);
        };
    }
    
    var obj = new Test();
    obj.func();
    

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

    • 不可以当做构造函数,也就是说,不可以使用 new 命令,否则会抛出错误。
    • this、arguments、caller等对象在函数体内都不存在。
    • 不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。

    总结

    箭头函数除了传入的参数之外,其它的对象都没有!在箭头函数引用了this、arguments或者参数之外的变量,那它们一定不是箭头函数本身包含的,而是从父级作用域继承的。

    天道酬勤,功不唐捐!

      

      

     

  • 相关阅读:
    SQL2008还原数据库差异备份
    关于串行接口
    SQL Server 2000删除表中的重复记录
    在SQL SERVER 2005创建用户定义函数语法
    C#中的字段与属性
    对SQL数据表和数据库进行迭代操作
    第4章 最简单的C程序设计——顺序程序设计
    走进SQL Server 2005:备份与恢复功能
    ASP.NET中上传下载文件
    Sql常见面试题
  • 原文地址:https://www.cnblogs.com/SharkChilli/p/7989343.html
Copyright © 2020-2023  润新知