箭头函数和This
箭头函数和This
基本语法
- “箭头”(
=>)定义函数
let fn =name => name;
console.log(fn(Mr.Lee));
- 普通函数代码
let fn=function (name){ return name; };
由此可见,箭头函数语法更简洁
箭头函数的参数
- 使用箭头符号(=>)定义函数的语法特征。
let fn=()=>'Mr,Lee'; console.log(fn());
-
箭头函数与可以传递两个或以上的参数,并实现运算后返回
let fn =(x,y)=>x+y; console.log(fn(10,20)); // 函数代码为 let fn =function(x,y){ return x+y; }
- 如果你定义的函数 并不需要传递参数 直接用()返回就行
let fn=()=>'Mr,Lee'; console.log(fn());
-
如果函数体需要更复杂的操作,可以将箭头符号右边使用传统函数体
let fn=(x,y)=>{ return x+y } console.log(fn(10,20));
-
如果箭头符号右边是对象,返回的是对象,则需要用圆括号包含着
let fn=name=>({ name:name,age:100 }); console.log(fn('Mr.Lee').name);
-
如果箭头符号左边是对象作为参数,右边是对象的属性运算,也支持;
let fn=({name,age})=>name+','+age;
console.log(fn({name:'Mr.Lee',age:100}))
-
自我执行函数
((name)=>{ console.log(name); })('Mr.Lee');
绑定this
- 箭头语法
箭头函数不会创建自己的this,所以它没有自己的this,它只会从自己的作用域链的上一层继承this。
let obj={ name:'Mr.Lee', age:100, fn:function(){ setTimeout(()=>{ console.log(this); //this指向的是我们所需要的 console.log(this.name+','+this.age); //箭头函数中的this是最外层定义函数绑定,不受内部影响 },500) } }; obj.fn();
- 函数代码
JS`内部首先会先生成一个对象。- 再把函数中的
this指向该对象。 - 然后执行构造函数中的语句。
- 最后隐式的返回
this。
let obj={ name:'Mr.Lee', age:100, fn:function(){ let that=this; setTimeout(function(){ console.log(this); console.log(this.name+','+this.age); },500) } }; obj.fn();
-
this全局指向window 在某个对象内部指向当前对象
-
当obj对象下包含了类似setTimeout函数内部 这是指向就出现问题了
-
Web环境下,它指向Window,而在node环境下它指向setTimeout
-
我们通常将this 在setTimeout外部进行赋值保存
箭头函数与普通函数的区别
箭头函数中的this指向
- 箭头函数没有原型prototype
- 箭头函数不会创建自己的This
- 不能修改箭头函数的This指向
- 箭头函数不能作为构造函数使用
- 箭头函数没有自己的Arguments,请直接使用...other模式(rest运算符)
-
不支持aeguments绑定,请直接使用...other模式(rest运算符)
1 let fn=(...other)=>{ 2 return other[0] + other[1] 3 }; 4 console.log(fn(10,20)); //console.log(10,20); 5 console(typeof fn); 6 console .log(fn instanceof Function);
- 尾调用
1 // 应用场景 递归函数 2 'use strict'; //内部进行优化 3 function fn(x){ 4 console.log(x); 5 if (x<=1) { 6 return 1; 7 } 8 return fn(x-1); //必须用return返回 并且不能包含其他参数 9 } 10 fn(10);

浙公网安备 33010602011771号