关于ES6箭头函数中的this问题
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
简要介绍:箭头函数中的this,指向与一般function定义的函数不同,箭头函数this的定义:箭头函数中的this是在定义函数的时候绑定,而不是在执行函数的时候绑定。 (1)一般函数this指向在执行是绑定 当运行obj.say()时候,this指向的是obj这个对象。 var x=11; var obj={ x:22, say:function(){ console.log(this.x) } } obj.say(); //console.log输出的是22 (2)所谓的定义时候绑定,就是this是继承自父执行上下文!!中的this,比如这里的箭头函数中的this.x,箭头函 在JavaScript的ES6标准中,箭头函数引入了一个新的特性,即`this`的处理方式与传统的函数有所不同。本文将详细解析箭头函数中的`this`问题,帮助开发者更好地理解和运用这一新特性。 通常,`this`在JavaScript中的行为取决于函数的调用方式。在普通函数中,`this`的值在函数执行时被确定,它会根据函数被调用的位置(上下文)来指向不同的对象。例如,当一个函数作为对象的方法被调用时,`this`会指向那个对象。 ```javascript var x = 11; var obj = { x: 22, say: function() { console.log(this.x); } }; obj.say(); // 输出22 ``` 在这个例子中,`say`函数作为`obj`对象的一个方法被调用,所以`this`指向`obj`,因此`console.log(this.x)`输出22。 然而,在箭头函数中,`this`的行为有所不同。箭头函数的`this`值并不是在函数执行时绑定的,而是**在定义函数时继承自其父执行上下文的`this`**。这意味着箭头函数没有自己的`this`,而是共享了外部作用域的`this`。 ```javascript var x = 11; var obj = { x: 22, say: () => { console.log(this.x); } }; obj.say(); // 输出11 ``` 在这个例子中,箭头函数`say`的`this`继承自它的父执行上下文,即全局作用域(在浏览器中是`window`对象)。因此,`console.log(this.x)`输出11,因为`this`指向全局变量`x`。 同样,如果箭头函数在构造函数内部,其`this`会指向构造函数的实例,就像下面的例子所示: ```javascript var a = 11; function test1() { this.a = 22; let b = function() { console.log(this.a); }; b(); } var x = new test1(); // 输出11 var a = 11; function test2() { this.a = 22; let b = () => { console.log(this.a); }; b(); } var x = new test2(); // 输出22 ``` 在`test1`中,由于`b`是一个普通函数,`this`在执行时被绑定到`test1`的实例,因此输出11。而在`test2`中,箭头函数`b`的`this`继承自`test2`的实例,所以输出22。 深入理解箭头函数中的`this`,关键在于箭头函数没有自己的执行上下文,因此它不创建自己的`this`值。可以认为箭头函数“借用”了外层作用域的`this`。这使得箭头函数无法作为构造函数使用,因为它们无法设置新的`this`值。这种设计使得箭头函数在某些场景下更简洁,但在其他需要动态`this`的场合可能带来困扰。 在ES5中,为了达到类似箭头函数的效果,我们通常需要保存外部作用域的`this`,例如使用`var _this = this`,然后在回调函数中引用`_this`。ES6的箭头函数则简化了这一过程。 总结来说,箭头函数改变了`this`的常规行为,使其在定义时就已确定,并且继承自父执行上下文。在使用箭头函数时,开发者需要注意这一点,避免因`this`指向的改变而产生的错误。对于那些依赖于`this`动态绑定的场景,如事件处理、定时器回调或构造函数,应当谨慎使用箭头函数。同时,理解并掌握这一特性,有助于写出更加清晰和易于维护的JavaScript代码。
- 粉丝: 2
- 资源: 961
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip
- (源码)基于计算机系统原理与Arduino技术的学习平台.zip
- (源码)基于SSM框架的大学消息通知系统服务端.zip
- (源码)基于Java Servlet的学生信息管理系统.zip
- (源码)基于Qt和AVR的FestosMechatronics系统终端.zip