博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS闭包问题(二)
阅读量:6489 次
发布时间:2019-06-24

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

在之前的文章中大概介绍了一下JS闭包,同时讲了闭包与变量之间的问题,今天我们继续聊闭包,聊聊闭包与this对象之间的问题。

我们知道,this指向当前对象,而在全局环境中,this就等于window对象,举个例子:

var name = "The Window";var object = {    name: "My Object",    getName: function(){        return this.name;    }}alert(this);   // [object Window]alert(this.name);    // "The Window"alert(object.getName());     // "My Object"

上面例子很好理解,在全局环境中,name == window.name == this.name,而object.getName中的this指向object。

那么遇到闭包又会是什么样的结果呢?我们接着往下看:

var name = "The Window";var object = {    name: "My Object",    getName: function(){        return function(){            return this.name;        }    }}alert(object.getName()());   // "The Window"

通常情况下,匿名函数的执行环境具有全局性,this对象指向window,所以上面例子中返回 "The Window"。但是,也存在例外的情况:

① 通过call()或者apply()改变函数的执行环境,这时this会指向其他对象

比如还是上面这个例子,只不过最后改成这样:

alert(object.getName().call(object));    // "My Object"

虽然还是执行同样一个匿名函数,但是执行环境却强制改成了object,这时的this就指向了object。

② 给HTML元素添加事件,这时匿名函数中的this会指向该事件所在元素

例如:

var oBtn = document.getElementById("btn");oBtn.onclick = function(){    alert(this.value);   // "点击我吧"}oBtn.addEventListener('click',function(){    alert(this.value);   // "点击我吧"});

可以看出,不管哪种绑定事件方式,匿名函数中的this对象均指向oBtn。

总而言之,this对象是在运行时基于函数的执行环境绑定的。

转载地址:http://sfouo.baihongyu.com/

你可能感兴趣的文章
Python计算&绘图——曲线拟合问题(转)
查看>>
logstash输出到elasticsearch多索引
查看>>
Spark-SparkSQL深入学习系列二(转自OopsOutOfMemory)
查看>>
数学计算不精确的芯片能帮助解决难题
查看>>
selenium-webdriver(python) (十四) -- webdriver原理
查看>>
《ANSYS FLUENT 16.0超级学习手册》——导读
查看>>
Zookeeper的功能以及工作原理 (转自:http://www.cnblogs.com/felixzh/p/5869212.html)
查看>>
服务器管理助手Linux版(宝塔)新版安装,支持一键SSL配置
查看>>
开发原生的 Google 眼镜应用 【已翻译100%】(1/2)
查看>>
《树莓派Python编程入门与实战》——1.3 哪些树莓派外设是必须的
查看>>
《编译与反编译技术实战 》一3.2 词法分析器的手工实现
查看>>
《计算机存储与外设》----1.5 虚拟存储器和存储器管理
查看>>
《 Python树莓派编程》——3.4 利用Python进行编程
查看>>
从损坏的 Linux EFI 安装中恢复
查看>>
Git Rebase教程: 用Git Rebase让时光倒流
查看>>
柏林纪行(上):整体感受
查看>>
《Python数据科学指南》——1.14 返回一个函数
查看>>
《Python数据分析》一1.7 学习手册页
查看>>
Centos7 下建立 Docker 桥接网络
查看>>
《Hack与HHVM权威指南》——1.6 类型推理
查看>>