this-3
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>
随机推荐
- Java如何声明一个数组?JS如何声明一个数组?如何获取数组长度
1 Long[] numbers; //一般使用的定义方式,可分为静态和动态两种定义方式,下有说明. 2 Long numbers[]; //跟上面用法一致. 3 Long... numbers; / ...
- 学习saltstack (三)
salt是一个新的基础平台管理工具,2011-02-20诞生,创造者Thoms SHatch,起名salt原因生活中常见.易记,使用saltstack.com原因这个域名没有被注册,Because s ...
- ROS机器人操作系统相关书籍、资料和学习路径
作者:Top Liu链接:https://zhuanlan.zhihu.com/p/30391098来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本文是易科机器人实验 ...
- 定常系统(时不变系统)和时变系统&& 动态系统和静态系统
根据系统是否含有参数随时间变化的元件,自动控制系统可分为时变系统与定常系统两大类. 定常系统又称为时不变系统,其特点是:系统的自身性质(所研究物体的本质属性例如:质量.转动惯量等)不随时间而变化.具体 ...
- CSS 面试题总结
CSS 中类 (classes) 和 ID 的区别. 书写上的差别:class名用"."号开头来定义,id名用"#"号开头来定义: 优先级不同(权重不同) 调用 ...
- 一行代码让微信小程序支持 cookie
weapp-cookie 一行代码让微信小程序支持 cookie,传送门:github Intro 微信原生的 wx.request 网络请求接口并不支持传统的 Cookie,但有时候我们现有的后端接 ...
- java中为什么接口中的属性都默认为static和final?
1)为什么接口中的属性都默认为static和final?Sun公司当初为什么要把java的接口设计发明成这样?[新手可忽略不影响继续学习]答:马克-to-win:接口中如果可能定义非final的变量的 ...
- Spring Boot-@Configuration注解
@Configuration:指明当前类是一个配置类,就是来替代spring的配置文件 @Configuration public class MyConfigFile { @Bean public ...
- nfs客户端的一次处理
为什么要说这个呢,由于节点环境不一致,导致在重建pod时,我们暂且叫该pod为 cxpod,cxpod所在宿主机出现了问题现象如下:一.cxpod始终处于创建中 ContainerCreating [ ...
- linux磁盘之回环设备
为什么要讲回环设备,下面看下系统的采样情况 上面图有loop0,loop1等设备标记,这些是什么?看看下面fdisk -l 的结果,乱糟糟的一堆? 什么是回环设备? 上面的loop0, loop1就是 ...