前端-浅谈箭头函数的this和普通函数的this
2017-08-07 09:45
411 查看
说起胖函数的this指向这个坑我是踩了很多遍啊,
说起this,我相信只要是做编程写代码的对this一定都有了解。我现在和大家说说JavaScript的胖函数的this指向和es5普通函数的this指向什么不一样吧。
OK ,我理解的是ES6的箭头函数的this指向是,在哪里定义的箭头函数那么它的this就指向哪里。
而ES5普通函数的this指向是,在哪里调用的函数,那么this就指向哪里。
我们来看下面的例子
var name='window';
var obj = {
name:'obj',
nameprintf:function(){
console.log(this.name)
}
}
obj.nameprintf();//'obj'
var w =
obj.nameprintf;
w();//'window'
第一处打印调用了obj.nameprintf(),按照我们前面说的谁调用函数,函数里面的this就指向谁,因此这里的this指向obj,所以打印obj.name也就是obj。
第二处打印调用w(),这里其实就是把obj.nameprintf这个函数的函数体赋给了w这个函数,相当于在全局空间下写了一个w函数,里面的代码就是obj.nameprintf里面的代码,所以此时的this指向window,因此打印的this.name就是window。
我们试试用箭头函数定义nameprintf这个函数
var name='window';
var obj = {
name:'obj',
nameprintf:()=>{
console.log(this.name)
}
}
obj.nameprintf();
OK ,我们现在可以看到obj.nameprintf()的运行结果是window。
我们试着和上面普通函数定义的nameprintf比较一下,都是相同的obj.nameprintf()调用,打印的this。name却是不一样的,
上面我们已经解释了普通函数的this指向,
现在我们来解释箭头函数的this,其实箭头函数里是没有this的,而普通函数的是有this的。
但是普通函数在定义的时候并不知道自己的this要指向哪里,所以在被调用的时候普通函数里的this会指向调用它的那个对象。
而箭头函数因为本身没有this,它会直接绑定到它的词法作用域内的
通俗点说 就是它会直接绑定到它父级的执行上下文里的this。
所以上面第二例子里的箭头函数里的this其实指向的是window
说起this,我相信只要是做编程写代码的对this一定都有了解。我现在和大家说说JavaScript的胖函数的this指向和es5普通函数的this指向什么不一样吧。
OK ,我理解的是ES6的箭头函数的this指向是,在哪里定义的箭头函数那么它的this就指向哪里。
而ES5普通函数的this指向是,在哪里调用的函数,那么this就指向哪里。
我们来看下面的例子
var name='window';
var obj = {
name:'obj',
nameprintf:function(){
console.log(this.name)
}
}
obj.nameprintf();//'obj'
var w =
obj.nameprintf;
w();//'window'
第一处打印调用了obj.nameprintf(),按照我们前面说的谁调用函数,函数里面的this就指向谁,因此这里的this指向obj,所以打印obj.name也就是obj。
第二处打印调用w(),这里其实就是把obj.nameprintf这个函数的函数体赋给了w这个函数,相当于在全局空间下写了一个w函数,里面的代码就是obj.nameprintf里面的代码,所以此时的this指向window,因此打印的this.name就是window。
我们试试用箭头函数定义nameprintf这个函数
var name='window';
var obj = {
name:'obj',
nameprintf:()=>{
console.log(this.name)
}
}
obj.nameprintf();
OK ,我们现在可以看到obj.nameprintf()的运行结果是window。
我们试着和上面普通函数定义的nameprintf比较一下,都是相同的obj.nameprintf()调用,打印的this。name却是不一样的,
上面我们已经解释了普通函数的this指向,
现在我们来解释箭头函数的this,其实箭头函数里是没有this的,而普通函数的是有this的。
但是普通函数在定义的时候并不知道自己的this要指向哪里,所以在被调用的时候普通函数里的this会指向调用它的那个对象。
而箭头函数因为本身没有this,它会直接绑定到它的词法作用域内的
this,也就是定义它时的作用域内的
this值。
通俗点说 就是它会直接绑定到它父级的执行上下文里的this。
所以上面第二例子里的箭头函数里的this其实指向的是window
相关文章推荐
- ES6的箭头函数this和普通函数的this区别
- js中箭头函数和普通函数this的区别
- 箭头函数普通函数this
- 普通函数与箭头函数的this
- es6箭头函数this指向
- es6箭头函数中this的问题
- 函数调用约定(注意c++普通函数成员调用时有this参数)
- 箭头函数和普通函数的区别
- 浅谈箭头函数写法在ReactJs中的使用
- ES6(ECMAScript 6 ) 箭头函数以及js中的this
- 深入理解Javascript箭头函数中的this
- this 指向详细解析(箭头函数)
- js中this的理解和实践【包含箭头函数中的this】
- ES6箭头函数中的this绑定问题
- this 指向详细解析(箭头函数)
- JS-箭头函数中的this的指向
- JavaScript中的普通函数和箭头函数的区别和用法详解
- ES6 箭头函数 this 指向
- bind(this)和es6箭头函数
- 关于ES6箭头函数中的this问题