var test1 = {
name: 'windseek1',
showname: function () {
console.log(this.name);
}
}
var test2 = { name:'windseek2',
showname: test1.showname
}
test2.showname()

运算结果是windseek2,由于test2.showname=test1.showname所以test2.showname()=test1.showname();

test2.showname=

function () {

console.log(this.name);

}

test2.showname();对象时test2,所以this也指向test2 name自然也是test2.name windseek2

上面的代码也相当于这样写:

var test1 = {
name: 'windseek1',
showname: function () {
console.log(this.name);
}
}
var test2 = { name:'windseek2',
showname: function () {
console.log(this.name);
}
}
test2.showname()

运算结果是一样的

var test1 = {
name: 'windseek1',
showname: function () {
console.log(this.name);
}
}
var test2 = { name:'windseek2',
showname: function () {
test1.showname();
}
}
test2.showname()

这时的运算结果应该是windseek1,由于test2.showname()执行其实是找到,test1.showname()执行,对象时test1,this指向test1,结果也就是test1.name也就是windseek1

var name="windseek";
var test1 = {
name: 'windseek1',
showname: function () {
console.log(this.name);
}
}
var test2 = { name:'windseek2',
showname: function () {
var test=test1.showname;
test();
}
}
test2.showname();

结果是windseek,因为test2.showname()执行时会找到test()执行,test=function () {console.log(this.name);},test前面没有任何对象,作用域就是全局的,this就是全局变量,this.name也就是windseek

上述代码可以解释成以下代码

var name="windseek";
var test1 = {
name: 'windseek1',
showname: function () {
console.log(this.name);
}
}
var test2 = { name:'windseek2',
showname: function () {
var test=function () {
console.log(this.name);
};
test();
}
}
( function () {
var test=function () {
console.log(this.name);
};
test();
})();

写到这,感觉写代码像是在做数学题了,越来越有意思了

var name='windseek';
var test1 = {
name: 'windseek1',
showname: function () {
console.log(this.name);
}
}
var test2 = { name:'windseek2',
showname: function () {
setTimeout(test1.showname,1000);
}
}
test2.showname();

结果就是windseek其实,setTimeout等价于这种函数function(__callback){ __callback();} 最后执行的是callback

等价于这样写

var name='windseek';
var test1 = {
name: 'windseek1',
showname: function () {
console.log(this.name);
}
}
var test2 = { name:'windseek2',
showname: function () {
(function(__callback){
__callback();
})(test1.showname);
}
}
test2.showname();

结果一样也是windseek,但是这个不会延迟,settimeout会延迟,setInterval也是一样的原理

js中的this关键字,setTimeout(),setInterval()的执行过程的更多相关文章

  1. 关于JS中的this关键字

    在学习js时,应该先了解下this关键字,关于js中的this关键字和其他的面向对象语言中的this是不同的,比如在java中,this指的的是当前对象,而在js中,w3c是这样规定的: 关键字 th ...

  2. js中的计时器事件`setTimeout()` 和 `setInterval()`

    js中的计时器事件 在js中,通常会有一些事件,我们需要让它 间隔一段时间之后再发生,或者 每隔一段时间 发生一次,那就需要用到我们js中的计时事件 计时事件主要有两种: setTimeout() - ...

  3. js异步处理工作机制(setTimeout, setInterval)

    经常谈到异步,但是发现自己一直没深入理解setTimeout, setInterval,逛论坛的时候发现了这篇好文章,分享一下. ————————————————————以下为原文—————————— ...

  4. js中的匿名函数和匿名自执行函数

    1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景:   <input type="button" value="点击" id ...

  5. Java中JIN机制及System.loadLibrary() 的执行过程

    Android平台Native开发与JNI机制详解 http://mysuperbaby.iteye.com/blog/915425 个人认为下面这篇转载的文章写的很清晰很不错. 注意Android平 ...

  6. bash命令检测Shell脚本中的语法错误和查看详细执行过程

    (1).bash命令检测Shell脚本中的语法错误 bash -v [脚本] [root@youxi1 ~]# vim a.sh #/bin/bash sum=$[$1+$2] echoo $sum ...

  7. JS中的间歇(周期)调用setInterval()与超时(延迟)调用setTimeout()相关总结

    超时调用需要使用window.setTimeout(code,millisec)方法 它接受两个参数:要执行的代码和以毫秒表示的时间(即在执行代码前需要等待多少毫秒).其中第一个参数可以是一个包含JS ...

  8. 清除定时器 和 vue 中遇到的定时器setTimeout & setInterval问题

    2019-03更新 找到了更简单的方法,以setinterval为例,各位自行参考 mounted() { const that = this const timer = setInterval(fu ...

  9. 浅谈js中的this关键字

    ---恢复内容开始--- this是JavaScript中的关键字之一,在编写程序的时候经常会用到,正确的理解和使用关键字this尤为重要.接下来,笔者就从作用域的角度粗谈下自己对this关键字的理解 ...

随机推荐

  1. bugly集成了Tinker热更新

    介绍 热更新能力是Bugly为解决开发者紧急修复线上bug,而无需重新发版让用户无感知就能把问题修复的一项能力.Bugly目前采用微信Tinker的开源方案,开发者只需要集成我们提供的SDK就可以实现 ...

  2. React-intl 实现多语言

    前言 React 做国际化,我推荐使用 React-intl , 这个库提供了 React 组件和Api两种方式来格式化日期,数字和字符串等.知道这个库了,那让我们开始使用它 组件用法 为了和Reac ...

  3. 基于Quartz.NET框架的WinForm任务计划管理工具

    最近接到一个小需求 ——可以定期同步20个Sql Server 7.0数据库里的数据(数据量会预计>10000),并保存为cvs格式文件 ——可以设置保存文件数据量 ——该应用需要用WinFor ...

  4. ios跳转到系统设置

    在项目中,我们经常会碰到使用位置的需求.当用户设置app不允许使用位置的时候,最好的用户体验就是直接调转到系统的位置设置界面,进行设置. 第一 跳转到自己项目(在需要调转的按钮动作中添加如下的代码,就 ...

  5. QTP11完美破解小笔记

    相比Loadrunner的破解,QTP的应该会更简单,但是效果并没有Loadrunner的长久.QTP的破解只能维持30天,每30天需要再进行如下操作: 1.到C:\ProgramData目录下面去删 ...

  6. HBase、HDFS和MapReduce架构异同简解

    HBase.HDFS和MapReduce架构异同 .. HBase(公司架构模型) HDFS2.0(公司架构模型) MR2.0(公司架构模型) MR1.0(公司架构模型) 中央 HMaster Nam ...

  7. Json数据解析在Unity3d中的应用

    最近做项目过程中因为Json文件名写错了一个字母Unity报错,找错误找到半夜,当时为了验错,写了一个小Demo,正好借此总结一下Json. 1.什么是Json JSON(JavaScript Obj ...

  8. .NET 知识整理笔记

    本文纯属自己理解着写的,如果有什么错误或者不全面希望读者能够加以补充!~ 1.Web.Config配置文件的节点操作. 在Web.Config中写入. <configuration> &l ...

  9. 算法模板——sap网络最大流 3(递归+邻接表)

    实现功能:同前 程序还是一如既往的优美,虽然比起邻接矩阵的稍稍长了那么些,不过没关系这是必然,但更重要的一个必然是——速度将是一个质的飞跃^_^(这里面的point指针稍作了些创新——anti指针,这 ...

  10. 1257: [CQOI2007]余数之和sum

    1257: [CQOI2007]余数之和sum Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 2001  Solved: 928[Submit][Sta ...