博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
闭包中的 this 对象
阅读量:4480 次
发布时间:2019-06-08

本文共 1248 字,大约阅读时间需要 4 分钟。

关于this对象

  在闭包中使用this对象也可能会导致一些问题。this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,

 function createFunction(){   alert(this); }; createFunction(); // window 

  而当函数被作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环节具有全局性,因此其this对象通常指向 window。

  但有时候由于编写闭包的方式不同,这一点可能不会那么明显。

 

var name = "The Window";  var object = {    name:"My Object",    getNameFunc:function(){      return function(){        return this.name;      };    }}alert(object.getNameFunc()()); // "This Window 非严格模式下"

 

上面代码先创建了一个全局变量 name ,又创建了一个包含 name 属性的对象。 这个对象还包含一个方法--- getNameFunc(),它返回一个匿名函数,而匿名函数又返回 this.name。 由于getNameFunction()返回一个函数,因此调用object.getNameFunc()(),就会立即调用它返回的函数,结果就是返回一个字符串。然而,这个例子返回的字符串是"The Window" 既全局 name 变量的值。

为什么匿名函数没有取得其包含作用域(外部作用域)的this对象尼?

<1> 前面提到过,函数执行时活动对象自动会保存两个值,一个是 this 与 arguments . 内部函数搜索这两个值,只会搜索到其变量对象为止。因此永远不可能直接访问外部

函数中的这两个变量。 不过这可以使用一个变量来保存 this对象,这样就可以访问了 如下

var name = "The Window";var object = {  name:"My Object",  getNameFunc:function(){    var _this = this;    return function(){      return _this.name;    };  }}alert(object.getNameFunc()()); // "My Window 非严格模式下"

 

上述代码中 _this 变量来保存,而在定义闭包之后,闭包也可以访问这个变量,因为它是我们在包含函数中特意声明的一个变量。

即使返回后调用,其_this任然引用着 object, 所以调用 object.getNameFunc()()就返回了“My Object” 如下图

转载于:https://www.cnblogs.com/czhyuwj/p/5636068.html

你可能感兴趣的文章
欢迎来到Attention的博客
查看>>
获取IOS bundle中的文件
查看>>
document
查看>>
定义DoubleArray并将其作为value写入SequenceFile
查看>>
Hadoop下大矩阵乘法Version2
查看>>
iPhone内存溢出——黑白苹果
查看>>
Struts2学习笔记(十二) 类型转换(Type Conversion)(下)
查看>>
tcpdump学习
查看>>
局域网内传输文件速度慢
查看>>
Linux的核心版本(摘抄)
查看>>
CASE表达式
查看>>
后缀自动机
查看>>
zkw线段树
查看>>
asp.net中导出Excel的方法
查看>>
[转]跟紧时代,让你的设计更加popular
查看>>
作业1226
查看>>
mainline.js主线
查看>>
fseek()
查看>>
Python学习笔记——PyQt控件中文字居中显示
查看>>
JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误
查看>>