this 深度面试题3
2024-09-01 11:28:09
window.val = 1;
var obj = {
val: 2,
dbl: function () {
this.val *= 2;
val *= 2;
console.log(val);
console.log(this.val);
}
};
// 说出下面的输出结果
obj.dbl();
var func = obj.dbl;
func();
结果是: 2 4 8 8
val变量在没有指定对象前缀,默认从函数中找,找不到则从window中找全局变量
即 val *=2 就是 window.val *= 2
this.val默认指的是 obj.val ;因为 dbl()第一次被obj直接调用
<2>14行代码调用
func() 没有任何前缀,类似于全局函数,即 window.func调用,所以
第二次调用的时候, this指的是window, val指的是window.val
第二次的结果受第一次的影响
var obj = {
say: function () {
return function() {
console.log(this)
}
}
}
obj.say()(); // window
var obj = {
say: function () {
return ()=> {
console.log(this)
}
}
}
obj.say()(); // obj
匿名函数由于没有默认的宿主对象,所以默认this指向window 箭头函数改善
<script>
var obj = {
say: function () {
setTimeout(() => {
console.log(this)
});
}
}
obj.say(); // obj
</script>
此时的 this继承自obj, 指的是定义它的对象obj, 而不是 window!
定时器中的函数,由于没有默认的宿主对象,所以默认this指向window
但是使用箭头函数可以改善
最新文章
- [LeetCode] Binary Tree Inorder Traversal 二叉树的中序遍历
- Ubuntu小点汇总,更新中...
- 7、JavaScript总结——实现选项卡切换的效果
- 验证(Verification)与确认(Validation)的差别
- JS学习笔记(一)基本数据类型和对象类型
- asp.net ajax 检测用户名是否可用代码
- redis删除所有key
- echart折线图系列一:折线图基本配置
- spark-rpc是如何实现将netty的Channel隐藏在inbox中的
- Exp 8 Web基础
- react-native 搭建环境
- Java学习笔记之异常处理
- Java多线程超详细总结
- wordpress 常用函数-wpdb类
- c #include ";"; 和 <;>;
- 归纳整理Linux下C语言常用的库函数----字符串转换、字符测试、及内存控制
- Python3 hex() 函数
- Java程序设计11——异常处理
- 【springmvc+mybatis项目实战】杰信商贸-5.生产厂家DAO+SERVICE+CONTROLLER+JSP+配置文件
- Linux 查看CPU、Memory等资源占用情况