this引用

this在js代码中经常用到,但有时候也会出现引用错误的问题,以下是一些经常用到的情况:

1、在标准函数中,this引用的是把函数当成方法调用的上下文对象。以下是《JavaScript高级程序设计》中的例子。

标准函数中的this

       结果是 18:red   20:blue 。第一个输出red,很容易理解,因为this指向window。而在把sayColor()赋值给o之后再调用o.sayColor(),this指向o,即this.color相当于o.color,所以会显示blue。

2、在箭头函数中,this引用的是定义箭头函数的上下文。这与标准函数是不同的。

箭头函数中的this

       结果是16:red   18:red。   因为箭头函数中的this会保留定义该函数时的上下文,箭头函数的函数名只是保存指针的变量。因此全局定义的sayColor()函数和o.sayColor()是同一个函数,只不过执行时的上下文不同。

3、闭包中使用this。如果内部函数没有使用箭头函数,则this对象会在运行时绑定到执行函数的上下文。

    结果 The Window。首先,getIdentityFunc()方法返回的是一个匿名函数,这个匿名函数返回的是this.identity。所以obj.getIdentityFunc()()得到的就是this.identity。这里的关键问题是为什么匿名函数没有使用其包含作用域(getIdentityFunc())的this对象呢?因为每个函数在调用时都会自动创建this和arguments。内部函数永远不可能直接访问外部函数的这两个变量。但是,如果把this保存在闭包可以访问的另一个变量中,则是行得通的。

闭包访问包含作用域中的this和arguments

结果是 My Object。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容