博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript中setInterval与setTimeout中this的问题以及对于闭包的一些理解
阅读量:6509 次
发布时间:2019-06-24

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

  最近写代码是碰到一个setInterval中的this指针的问题,代码如下:

var testClass = function () {    this.name = "test";    this.intervalId = null;};testClass.prototype.start = function () {    this.intervalId = setInterval(this.sayHello, 1000);}testClass.prototype.sayHello = function () {    console.log("Hello, " + this.name);}var test = new testClass();test.start(); //输出“Hello,”

  当时第一反应就是this指针出问题了,但是不知道怎么解决,因为setInterval中传入的只是函数的名字,并不是调用,所以我们没法通过保存this的方法来实现,经过多番搜索,找到如下几种解决方案。

  1. 使用bind函数,会有浏览器兼容问题

this.intervalId = setInterval(this.sayHello.bind(this), 1000);

  bind函数类似call函数,都会改变上下文的this,但是bind返回的是函数,而call则会调用函数。

  2.使用闭包,保存this变量

this.intervalId = setInterval(function () {
var self = this; return function() { self.sayHello();//有位大神解释闭包,闭包就是可以访问另一个函数内部而它自身外部的变量的函数,js类中的私有变量等就是通过闭包来实现权限控制的 };}.call(this), 1000);

  个人理解闭包其实就是在一个函数内有可以被外部访问的内部函数,能被访问的内部函数就是闭包,例如:

var a = function () {    function b() {//不是闭包,因为外部不能访问它        console.log(b);    };    return function c() {//闭包,外部可以访问        console.log(c);    }}

  

  理解的不知道对不对,敬请指教!!

  

转载于:https://www.cnblogs.com/DARKDD/p/4279595.html

你可能感兴趣的文章
Elastic+logstash+filebeat做Nginx日志分析
查看>>
Java IO流学习总结
查看>>
Nginx(四):LNMMP架构实现Web动静分离
查看>>
缩小表空间时ORA-03297
查看>>
SGE 和 Slurm对比
查看>>
2017 MacBook Pro比去年的机型快了20%
查看>>
ubuntu 无法更新/下载软件,报404错误解决办法
查看>>
(四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
查看>>
详解Zoosk千万用户实时通信背后的开源技术[转]
查看>>
linux命令行模式下输入Ctrl+s后界面锁定,假死。
查看>>
CentOS7关闭防火墙
查看>>
Solr5安装部署
查看>>
linux文件与文件夹权限
查看>>
使用rz\sz上传下载文件
查看>>
Shell 中的空值(null value)和不存在是不一样的。
查看>>
Lua使用总结
查看>>
Maven管理依赖
查看>>
MacOS的Clion找不到 wchar.h的解决方案
查看>>
Linux作业7
查看>>
正则表达式
查看>>