zoukankan      html  css  js  c++  java
  • JavaScript箭头函数(Lambda表达式)

    箭头函数也叫lambda表达式

    据说其主要意图是定义轻量级的内联回调函数

    栗有:

    1 var arr = ["wei","ze","yang"];
    2 arr.map(item=>"Mr."+item); // ["Mr.wei", "Mr.ze", "Mr.yang"]

    实则

    1 var arr = ["wei","ze","yang"];
    2 arr.map(function(item){
    3     return "Mr."+item;
    4 }); 

     

    1.注意点:

    (1)当箭头函数有一个参数的时候,参数可以不加括号,没有参数的时候就必须要加。

    定义 函数名 = 参数 => 函数体

    1 var student = name => "my name is " + name;
    2 console.log(student("wei ze yang"));
    3 // my name is wei ze yang

    (2)如果函数体不止一行,应该用花括号括起来,这时就要显示地返回。

    定义 函数名 = (参数,参数) => {

      函数体;

      return 返回值;    

    }

    1 var student = (name,age) => {
    2     age +=1;
    3     return "name:" + name + ",age:" + age;
    4 }
    5 console.log(student("wei ze yang",21));
    6 // name:wei ze yang,age:22

    2.arguments object

    正常的函数内:

    1 function student(name,age){
    2     console.log(arguments[0]);
    3 }
    4 
    5 student("weizeyang",22);

    但箭头函数不会暴露argument对象

    1 var student = (name,age) => {
    2     console.log(arguments[0]);
    3 }
    4 
    5 student("weizeyang");  // arguments is not defined 

    所以,argument将简单地指向当前作用域内的一个变量

    1 var arguments = ["Mr.wei"];
    2 
    3 var student = (name,age) => {
    4     console.log(arguments[0]);
    5 }
    6 
    7 student("weizeyang");  // "Mr.wei"

    或者这时可以使用“剩余参数”的时候代替

    1 var arguments = ["Mr.wei"];
    2 
    3 var student = (...arguments) => {
    4     console.log(arguments[2]);
    5 }
    6 
    7 student("weizeyang",22,true);  // true

    3.绑定this的值

    箭头函数是lexically scoped(词法作用域),这意味着其this绑定到了附近scope的上下文。

    也就是说,不管this指向什么,都可以用一个箭头函数保存。

     1 var student = {
     2     names:["wei","ze","yang"],
     3     setName: function() {
     4         console.log(this);
     5         this.name = this.names.join("")
     6     },
     7     getName: function() {
     8         console.log(this);
     9         return () => {
    10             return {
    11                 myName : "my name is " + this.name
    12             }    
    13         }
    14     }
    15 }
    16 
    17 student.setName();
    18 var student1 = student.getName();
    19 console.log(student1().myName);
    20 // my name is weizeyang

     有图为证,看下

    4.相关文档

    http://blog.csdn.net/cuit/article/details/53200335

    https://zhuanlan.zhihu.com/p/24856798

     

  • 相关阅读:
    数据结构做题一些总结
    ExecuteNoQuery执行, 报错“go”附近有语法错误。
    EF总结
    哨兵模式
    Redis 发布订阅
    Redis 持久化
    Redis 事务 和乐观锁
    缓存穿透和雪崩
    Redis 基础知识
    Redis 三种特殊的数据类型
  • 原文地址:https://www.cnblogs.com/wzy1569178479/p/7366314.html
Copyright © 2011-2022 走看看