this是什么?
JavaScript中,this关键词指的是他所属的对象;
它拥有不同的值,具体取决于它的使用位置。

1、在单独情况下,this指向全局对象window;
2、在函数中,this指向全局对象window;
3、在严格模式的函数中,this为undefined;
4、在对象的方法中,this指的是所有者对象;
5、在事件中,this指的是接收事件的元素;
6、使用call/apply方法,可以将this引用到任何对象。

上述1/2可以说明普通函数中,内层函数不能从外层函数中继承this的值,在内层函数中,this会是window或是undefined。
临时变量self用来将外部this值导入到内部函数中(另外的方式是在内部函数执行bind(this))

<script>
// var a = 43;
function foo() {
var a = 0;
console.log(this.a); // 2
return function (a) {
console.log(this.a); // undefined或43 把var a = 43; 注释掉,会打印出undefined,不注释就是43(说明上述1/2点)
};
} var obj = { a: 2 }; foo.call(obj)(); // 结果请看上述注释 foo的this被绑定到obj,注意是foo作用域内的this指向obj,返回函数的this为window
</script> <script>
console.log("--------------------------");
function foo2() {
var self = this;
console.log(this.a); // 3
setTimeout(function () {
var a = 4;
/*
下面这行代码里面的的a,表示的是对变量的调用,如果说匿名函数没有声明var a = 4;或匿名函数没有带形参,
又或上层作用域foo2中没有形参及变量声明、最外层没有声明的话,则就是报错,
而不是undefined:Uncaught ReferenceError: a is not defined
有形参则是undefined。
换句话说console.log(a)中就是去查找变量a啊,如果层层查找没有发现形参,也没有声明,那肯定是报错的啊。
*/
console.log("形参:" + a); // 形参:4
console.log("对象属性:" + this.a); // 对象属性:undefined
}, 100); var self = this;
setTimeout(function () {
console.log(self.a); // 3 临时变量self将外部this值导入到内部函数。
}, 100);
} var obj2 = { a: 3 }; foo2.call(obj2); // 2
// undefined
// -----------------------
// 3
// 形参:4
// 对象属性:undefined
// 3
</script>

随机推荐

  1. ACM - 最短路 - AcWing 849 Dijkstra求最短路 I

    AcWing 849 Dijkstra求最短路 I 题解 以此题为例介绍一下图论中的最短路算法.先让我们考虑以下问题: 给定一个 \(n\) 个点 \(m\) 条边的有向图(无向图),图中可能存在重边 ...

  2. Tomcat之“VM options配置”

    VM options: -Dfile.encoding=UTF-8

  3. 搞懂高并发性能指标:QPS、TPS、RT、吞吐量

      一.QPS,每秒查询 QPS:Queries Per Second意思是"每秒查询率",是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的 ...

  4. Architecture Principles

    Architecture Principles - Completed Components Name Statement Rationale Implications TOGAF Principle ...

  5. 后端渲染神器!Dust

    Dust一个适用于浏览器与node的异步模板框架. 先上实例 后端模板: {@inject api="http://api.myserver.com/get_message"} & ...

  6. 每日学习--Kociemba魔方算法

    由图可知19步还原魔方

  7. CCS基础样式表

    一.css样式表 1.样式表分类 1.内联式 <p >This is an apple</p> 2.内嵌样式表 作为一个独立的区域 内嵌在网页里面,必须写在head标签里面 & ...

  8. css使Img图片居中显示

    <div class="flex-center listing-img"> <img v-if="item.imgUrl" v-bind:sr ...

  9. Python接口自动化——文件上传/下载接口

    〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...

  10. 【转】shim.ChaincodeStubInterface用法

    作为记录 shim.ChaincodeStubInterface用法