es6箭头函数中this的问题
2017-04-10 00:00
585 查看
摘要: es6this箭头函数
js中函数作用域属于静态作用域,就是函数作用域的嵌套关系在函数定义时确定了,废话不多说直接上例子
就是说函数test在定义时作用域的嵌套关系就已经决定了。
ok,接下来就是箭头函数的this,
以下为我的理解,如有不正之处,望指点。
箭头函数不能用于构造函数,在上面的例子中,test1箭头函数定义在最外面,当test1函数打印this对象时会根据定义时决定的作用域嵌套关系逐级向上查找,因此查找的是window对象,在test2箭头函数中,由于test2定义在类P的func函数中,test2箭头函数打印this时,会先去func方法查找,找到了,然后打印。test3中,类中的方法默认开启了严格模式 所以test3中this为undefined。 可以将箭头函数中的this类比为函数中定义的变量,使用时按照定义时决定的作用域逐级查找直到找到为止。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <body> <script> var test1=()=>{ console.log(this.name,this); } window.name = "obj window"; class P{ constructor(){ this.name = "class p"; } func(){ var test2 = () =>{ console.log(this.name,this); }; function test3(){ console.log(this); } test1();//obj window test2();//class p test3();//undefined } } var p = new P(); p.func(); </script> </body> </html>
js中函数作用域属于静态作用域,就是函数作用域的嵌套关系在函数定义时确定了,废话不多说直接上例子
[javascript] view plain copy var a='out a'; function test(){ console.log(a); // out a } function outer(){ var a="in a"; test() }; outer();
就是说函数test在定义时作用域的嵌套关系就已经决定了。
ok,接下来就是箭头函数的this,
以下为我的理解,如有不正之处,望指点。
箭头函数不能用于构造函数,在上面的例子中,test1箭头函数定义在最外面,当test1函数打印this对象时会根据定义时决定的作用域嵌套关系逐级向上查找,因此查找的是window对象,在test2箭头函数中,由于test2定义在类P的func函数中,test2箭头函数打印this时,会先去func方法查找,找到了,然后打印。test3中,类中的方法默认开启了严格模式 所以test3中this为undefined。 可以将箭头函数中的this类比为函数中定义的变量,使用时按照定义时决定的作用域逐级查找直到找到为止。
相关文章推荐
- ES6箭头函数中的this绑定问题
- 关于ES6箭头函数中的this问题
- ES6,箭头函数解决this作用域问题
- ES6中箭头函数this指向的问题
- ES6箭头函数中的this绑定问题
- ES6 箭头函数this指向问题
- es6箭头函数中this的问题
- es6的箭头函数的this问题
- ES6箭头函数this指向问题
- es6-箭头函数中的this使用
- ES6语法---箭头函数/关于this指向
- es6箭头函数this指向
- ES6:箭头函数以及this
- ES6 箭头函数 this 指向
- bind(this)和es6箭头函数
- es6箭头函数的this与es5函数的this比较
- ES6---箭头函数与function定义函数有什么区别?在箭头函数中,this指向,构造函数,变量提升是如何表现的?
- 十,(补充)ES6中箭头函数this的指向
- es6箭头函数中this
- ES6 箭头函数中的 this?(临时性保存)