setTimeout的作用域以及this的指向问题
来源:互联网 发布:乐驰网络俱乐部 编辑:程序博客网 时间:2024/05/14 12:37
setTimeout方法是挂在window对象下的。《JavaScript高级程序设计》第二版中,写到:“超时调用的代码都是在全局作用域中执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined”。在这里,我们只讨论非严格模式。
setTimeout接受两个参数,第一个是要执行的代码或函数,第二个是延迟的时间。
一、先说结论:setTimeout中所执行函数中的this,永远指向window!!注意是要延迟执行的函数中的this哦!!
1. 直接使用,代码1.1:
setTimeout("alert(this)", 1); // [object Window]2. 在一个对象中调用setTimeout试试,代码1.2:
var obj = { say: function() { setTimeout("alert('in obj ' + this)", 0) }}obj.say(); // in obj [object Window]3. 将执行的代码换成匿名函数试试,代码1.3:
var obj = { say: function() { setTimeout(function(){alert(this)}, 0) }}obj.say(); // [object Window]
4. 换成函数引用再试试吧,代码1.4:
function talk() { alert(this);}var obj = { say: function() { setTimeout(talk, 0) }}obj.say(); // [object Window]
恩,貌似得到的结论是正确的,setTimeout中的延迟执行函数中的this指向了window。这里我反复的强调,是延迟执行函数中的this,是因为,我们经常会面对两个this。一个是setTimeout调用环境中的this,一个就是延迟执行函数中的this。
0 0
- setTimeout的作用域以及this的指向问题
- JavaScript中setTimeout的作用域以及this指向问题
- JS中setTimeout的作用域以及this的指向问题
- 【javascript 技巧】谈谈setTimeout的作用域以及this的指向问题
- setInterval和setTimeout函数中This的指向问题
- setTimeout中this指向问题
- this的指向问题
- settimeout的执行函数作用域问题
- setTimeout的作用域
- setTimeout的this指向:学习apply、call、bind
- setTimeout中this的指向,使用箭头函数后this的指向
- setInterval和setTImeout中的this指向问题
- 关于JS中for循环时,作用域问题和this指针指向的总结
- javascript 的 this 指向问题
- js函数的作用域与this指向
- js函数的作用域与this指向
- js函数的作用域与this指向
- js函数的作用域与this指向
- oracle安装好后 创建用户
- 大数据架构师之路-大数据框架大全
- Json概述以及python对json的相关操作
- 使用IntelliJ IDEA导入Spring源码
- MyString实现
- setTimeout的作用域以及this的指向问题
- Java基础:修饰符
- STM32启动文件详解
- JQuery中的遍历父/子/同胞
- 解决 linux下编译make文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题
- 算法导论的一些读后感
- python输出调试信息
- Codeforces Round #341 (Div. 2)AWet Shark and Odd and Even
- Mysql 事务隔离级别