箭头函数详解

箭头函数与普通函数不同

1:箭头函数不能使用new

2:箭头函数不能使用arguments,使用 rest参数 …

var a = (...A)=>{
    console.log(A)
}

3:箭头函数指向
先看一个栗子

var obj = {
    a:10,
    b()=>{
        console.log(this.a); //underfined
        console.log(this); //widow
    },
    c:function(){
        console.log(this.a); //10
        console.log(this);//obj
    }
}

在我的理解里面 箭头函数指向为同级,普通方式的上一级
实际上:箭头函数不定义this

4:没有原型属性

5:不能使用generator 和 yield

ps:终于理解 this在箭头函数中指向上下文,而在普通函数中谁调用指向谁。

1.箭头函数的this绑定看的是this所在的函数定义在哪个对象下,绑定到哪个对象则this就指向哪个对象

2.如果有对象嵌套的情况,则this绑定到最近的一层对象上

题外:
如何想获得传入的参数
var a = function(1,…,50){};
可以通过arguments获得

构造函数:
函数创建有两种方式:
var a = function(){};
function A (){};
var as = new A();
第二种可以通过new 创见一个新的函数;
使用内部的字符串函数创建一个字符串对象

下面几个例题吧[:https://blog.csdn.net/u013344815/article/details/73184928/]

var obj = {
    fn:function(){
        console.log(this); //指向obj,这个函数本身
    }
}

var obj = {
    fn:function(){
        setTimeout(function(){
            console.log(this); //window
        })
    }
}
this指向最外层window,this出现在setTimeout()中没有被调用
如果这里使用箭头函数又指向了obj本身。
var obj1 = {
    num:3,
    fn:function(){
        setTimeout(function(){
            console.log(this.num); //undefined
        })
    }
}
var obj1 = {
    num:4,
    fn:function(){
        setTimeout(()=>{
            console.log(this.num); //4;
        })
    }
}
在没有箭头函数的情况下,this指向window,在使用箭头函数的情况下,this指向obj
var obj1={
	num:4,
	fn:function(){
		var f=() => {    //object,也就是指obj1
			console.log(this);
			setTimeout(() => {
				console.log(this);// //object,也就是指obj1
			});
		}
		f();
	}
}

var obj1={
	num:4,
	fn:function(){
		var f=function(){    
			console.log(this); //window,因为函数f定义后并没有对象调用,this直接绑定到最外层的window对象
			setTimeout(() => {
				console.log(this);//window,外层this绑定到了window,内层也相当于定义在window层(全局环境)
			});
		}
		f();
	}
}
改变f箭头函数之后this指向window,因为没有定义

var obj1={
	num:4,
	fn:function(){
		var f=() => {    
			console.log(this); //object,f()定义在obj1对象中,this就指向obj1,这就是箭头函数this指向的关键
			setTimeout(function() {
				console.log(this);//window,非箭头函数的情况下还是要看宿主对象是谁,如果没有被对象调用,函数体中的this就绑定的window上
			});
		}
		f();
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章