JavaScript箭头函数(Lambda表达式)

箭头函数也叫lambda表达式

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

格式:x => {表达式} 

说明:=和>之间不能有空格等其他字符,而=>字符前后,可以有空格。

例如有:

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回计算结果,如果函数体不止一行,应该用花括号括起来,并且要显示地调用return返回值。(如果不需要返回值,则可以不用写return相关语句)

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

  函数体;

  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

出处:https://www.cnblogs.com/wzy1569178479/p/7366314.html

参考:

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

神奇的lambda表达式——函数式编程必学

您的资助是我最大的动力!
金额随意,欢迎来赏!
款后有任何问题请给我留言。

如果,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的推荐按钮。
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的关注我。(●'◡'●)

如果你觉得本篇文章对你有所帮助,请给予我更多的鼓励,求打             付款后有任何问题请给我留言!!!

因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【Jack_孟】!

原文地址:https://www.cnblogs.com/mq0036/p/14333817.html