箭头函数也叫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.相关文档
出处:https://www.cnblogs.com/wzy1569178479/p/7366314.html
参考: