setTimeout中所执行函数中的this,永远指向window

注意是要延迟执行的函数中的this哦!!

//片段一
setTimeout("alert(this)", 1);   // [object Window]

//片段二
var obj = {
  say: function() {
    setTimeout("alert(‘in obj ‘ + this)", 0)
  }
}
obj.say(); 

//片段三
var obj = {
  say: function() {
    setTimeout(function(){alert(this)}, 0)
  }
}
obj.say(); 

//片段四
function talk() {
  alert(this);
}

var obj = {
  say: function() {
    setTimeout(talk, 0)
  }
}

obj.say(); 
时间: 2024-10-13 04:58:22

setTimeout中所执行函数中的this,永远指向window的相关文章

addEventListener和attachEvent二者绑定的执行函数中的this不相同【转载】

yuanwen http://www.jb51.net/article/32511.htm 写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中 写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中. 最近在写一个事件代理的时候,遇到一个BUG,发现除此外,二者绑定的执行

为什么代码要写到匿名自执行函数中?

1. 为啥让你把代码写到匿名自执行函数中 // 目的是为了防止变量命名空间污染 // 1. 防止污染别的变量 // 2. 防止被别人污染 // 3. 表明这是一个独立的模块 // 原理:函数有作用域 2. 为什么把 window 传递到了匿名自执行函数中 // 1. 声明当前js文件模块的依赖项 // 2. 减少作用域查找范围,提高代码执行效率 ;(function (w, d, Vue, $) { // code here })(window, document, Vue, jquery) 原

VS2010中wmain入口函数中使用wprintf输出中文乱码问题

生活中的单例 中国(China),位于东亚,是一个以华夏文明为主体.中华文化为基础,以汉族为主要民族的统一多民族国家,通用汉语.中国疆域内的各个民族统称为中华民族,龙是中华民族的象征.古老的中国凭借自身的发展依旧美丽的屹立于东方民族之林,闪耀着她动人的光彩,世界上只有一个中国,任何部分都是祖国不可分割的一部分,今天我们的设计模式就从伟大的祖国开始说起---单例模式. 详解单例模式 单例模式是什么?跟我们的祖国有着怎样的关系呢?首先我们来看一下单例,从"单例"字面意思上理解为-一个类只有

三. var let const的理解 以及 立即执行函数中的使用 以及 for循环中的例子

一. 立即执行函数 windows中有个name属性,name='' '' var 如果我们用var name 去声明,那就会改变windows中name的值(因为我们不是在函数作用域中声明的,所以会覆盖全局的值) 为了避免这种问题,通常我们写一个立即执行函数(可读性不高) const 同样,如果我们用const去声明,也会改变全局的name属性 我们把const声明写在大括号里面,就不会改变全局的name属性了 二. for循环 常见的for循环,console.log(i) 会输出10,wh

JS中内嵌函数中this关键字的使用

this关键字的使用 在嵌套函数中:和变量不同,this关键字没有作用域的限制,在嵌套函数的内部使用this关键字可以分为以下两种情况: 1)如果嵌套函数作为方法调用,那么this为当前的上下文. 2)如果当做函数调用,那么this的值依赖于当前使用的是否为严格模式,在非严格模式下,this为全局上下文,否则为undefined. 例如: var test1={ a:1, b:2, fun1:function(){ console.log(“fun1: “ +this);    //this为t

js中自执行函数(function(){})()和(function(){}())区别

方式一,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用在去调用执行方式二,调用函数,得到返回值.强制运算符使函数调用执行(function(){})(); 是 把函数当作表达式解析,然后执行解析后的函数相当于 var a = function(){}; a(); a得到的是函数(function(){}()); 是把函数表达式和执行当作语句直接执行.相当于 var a = function(){}(); a得到的是结果最终结果是一样的.()只是起了 自执行的作用和 () 一样的还有

学习js即时执行函数中的this关键字详解

this是Javascript语言的一个关键字. 它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用.比如, function test(){ this.x = 1; } 随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是,调用函数的那个对象. 下面分四种情况,详细讨论this的用法. 情况一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global. 请看下面这段代码,它的运行结果是1. function te

js 执行完setTimeout再接着执行函数

var counter = 0; function increase(){ var d = jQuery.Deferred(); var doIncrease = function() { if(counter < 10){ counter++; setTimeout(doIncrease, 1000); } else { d.resolve(); } }; doIncrease(); return d.promise(); }; increase().then(function() { ale

python中的split函数中的参数问题

第一个参数代表的是分割符号,第二个参数表明是split次数. 用下面这个例子测试: str = 'server=mpilgrim&ip=10.10.10.10&port=8080'print str.split('=', 1)[0]print str.split('=', 1)[1]print str.split('=')[0]print str.split('=')[1] 结果是: servermpilgrim&ip=10.10.10.10&port=8080server