setTimeout的作用域及其中的this指向问题

摘要:
setTimeout方法挂在窗口对象下。在javascript的高级程序设计中,“称为超时的代码在全局范围内执行,因此函数中的this值在非严格模式下指向窗口对象,在严格模式下未定义”。setTimeout延迟执行函数中的这个总是指向窗口,而setTimeout调用环境中的这个是根据上下文确定的。默认值为window。

先看一个实例:

setTimeout的作用域及其中的this指向问题第1张

setTimeout的常见用法是让某个方法延迟执行。setTimeout方法是挂在window对象下的。

《javascript高级程序设计》中有:“超时调用的代码都是在全局作用域中执行的,因此函数中的this的值在非严格模式下指向window对象,在严格模式下是undefined”。这里讨论的是非严格模式。

setTimeout的延迟执行函数中的this,永远指向window,而setTimeout调用环境中的this,是根据上下文来确定的,默认为window。看下面的例子:

setTimeout的作用域及其中的this指向问题第2张

上面的例子可以看出。延迟执行函数中的this的确是指向了window,但是执行函数的其他变量需要根据上下文来确认

免责声明:文章转载自《setTimeout的作用域及其中的this指向问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux虚拟环境搭建DotNetBar的使用—(界面风格)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Autofac 组件、服务、自动装配 《第二篇》

Autofac 组件、服务、自动装配 《第二篇》http://www.cnblogs.com/kissdodog/p/3611799.html 一、组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1、类型创建RegisterType AutoFac能够通过反射检查一个类型,选择一个合适的...

【js重学系列】作用域

作用域 在 JavaScript 中, 作用域为可访问变量,对象,函数的集合。 在 Javascript 中,作用域分为 全局作用域 和 函数作用域 什么是作用域呢,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。 全局变量 变量在函数外定义,即为全局变量。 全局变量有 全局作用域: 网页中所有脚本和函数均可使...

python函数基础用法

一、函数的定义,调用和返回值   1.1 语法 def 函数(参数一,参数二...): ''' 文档注释 ''' 代码逻辑一 代码逻辑二 .... return 返回值   1.2 定义函数的三种形式     说明:定义阶段,只检测语法,不执行代码。 # 定义函数方式一:无参函数 def foo():...

spring中scope的prototype与singleton区别

最近在研究单例模式,突然想起项目中以下配置,scope="singleton" 和 scope="prototype"到底有何区别呢?以下做下简要分析。 <bean class="com.****.boss.domain.utils.CacheManager" scope="singleton" init-method="init" destr...

Spring Controller单例与线程安全那些事儿

目录 单例(singleton)作用域 原型(Prototype)作用域 多个HTTP请求在Spring控制器内部串行还是并行执行方法? 实现单例模式并模拟大量并发请求,验证线程安全 附录:Spring Bean作用域 单例(singleton)作用域 每个添加@RestController或@Controller的控制器,默认是单例(singleto...

c/c++中变量的作用域

作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域)。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。也就是说,作用域由变量所在的最近一对括号确定。 (1) 全局变量:    全局变量是在所有函数体的外部定义的,程序的所在部分(甚至其它文件中的代码)都可以使用。全局变量不受作用域的影响...