【前端】(三)ES6新特性之箭头函数

箭头函数

箭头函数即使用箭头表示的函数。
匿名函数才能改写为箭头函数。

写法

常见的函数写程箭头函数:

let num = function (a) {
	return a*2;
}

//写成箭头函数形式,function(a) 变成 =(a)=>
let num = (a) => {
	return a*2
}

//当只有一个参数的时候,省略(),
let num = a => {
	return a*2
}

//当函数体只有一条return语句时,省略{}和return
let num = a => a*2;

好处

  1. 语法比函数表达式更加简洁,是经典函数表达式的语法糖

箭头函数的this指向

普通函数的this:会重新绑定this,指向调用它的对象上
箭头函数:
(1)默认指向定义它时,所处上下文的对象的this指向。即ES6箭头函数里this的指向就是上下文里对象this指向,若没有上下文对象,this就指向window
(2)即使是call,apply,bind等方法也不能改变箭头函数this的指向

拓展:this指向问题

(1)默认绑定规则

① this默认指向window
② 全局环境下的this指向window

console.log(this) //window

③ 函数自己独立调用时内部的this指向window

function fun() {
	console.log(this)
}
fun() // window。
//fun()即window.fun(),fun()被window调用

③ 被嵌套的函数独立调用时,内部this指向window

var obj = {
	a:1,
	foo:function() {
		console.log(this) //object
		function test() {
			console.log(this) //window
		}
		test() 
	}
}

obj.foo(); //内部的test()自动执行,打印window

④ 闭包中的this默认指向window

var a = 0;
var obj = {
  a:2,
  foo:function() {
    console.log(this) // object
    return function test() {
      console.log(this) // window
    }
  }
}
var fn = obj.foo()
console.log(fn())
(2)隐式绑定
function foo() {
  console.log(this.a)
}
var obj = {
  a:1,
  foo:foo,
  obj2:{
    a:2,
    foo:foo
  }
}
// foo()函数的直接对象是obj,this指向直接对象
obj.foo(); //1
// foo()函数的直接对象是obj2,this指向直接对象
obj.obj2.foo()//2
(3)隐式绑定丢失的情况

隐式丢失就是指被隐式绑定的函数丢失了绑定对象从而默认绑定到window。

情况一:重新赋值

var a = 0;
function foo() {
  console.log(this.a);
}
var obj = {
  a:1,
  foo:foo
}
var bar = obj.foo
bar(); // 0
//bar()相当于window.bar()

等同于

var a = 0;
var bar = function foo () {
  console.log(this.a)
}
bar()

情况二:参数传递

var a = 0;
function foo() {
  console.log(this.a)
}
function bar(fn) {
  fn();
}
var obj = {
  a:1,
  foo:foo
}
bar(obj.foo) //0,指向window

情况三:内置函数 setTimeOut()和setInterval()第一个参数的回掉函数中的this默认指向了window

setTimeout(function(){
	console.log(this);
	},1000);

情况四:间接调用

function foo(){
	console.log(this.a)
}
var a=2;
var obj = {
	a:3;
	foo:foo
}
var p = {a:4}
// 赋值给另一个变量的一个属性 并且 立即调用
(p.foo = obj.foo)() //window
(4)显式绑定

call() apply() bind()把对象绑定到this上,叫做显示绑定。
一篇文章解决所有:https://www.cnblogs.com/Jade-Liu18831/p/9580410.html

(5)new绑定
  1. 相当于构造函数来实例化对象,内部this指向当前实例化的对象
function fn() {
  console.log(this)
}
var fn = new fn()
console.log(fn)   //fn
推荐文章

彻底理解js中this的指向,不必硬背。
文章中我认为有用的句子:
(1) this永远指向的是最后调用它的对象
(2) this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁(详细见原文)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值