面试题之this的指向
this是函数内部的一个对象,当函数被某对象调用时,this就指向该对象
1、在构造函数中
let name='window'
function Person(name,age){this.name=name;this.age=age
}
this绑定在实例化的对象上
let man=new Person('hkj',21)
console.log(man.name) //hkj
直接调用,this表示window
fun();
2、在箭头函数中
var name='hkj'
function fun(){var name="hkj1"return ()=>{var name='hkj2'console.log(this.name) //hkjreturn ()=>{var name='hkj3'console.log(this.name) //hkj}}
}
fun()()()
嵌套在函数中的this与调用最外层非箭头函数this
相同,最外层非箭头函数为fun(),其中的this指向window。
3、当做属性调用
var name='window'
function fun(){var name='fun'console.log(this.name)
}
let obj={fun:fun,name:'hkj'
}
obj.fun() //hkj
被当成属性调用时,函数中this指向最后一个调用函数的对象,这里指向obj
4、定时器this指向(普通函数)
var name='window'
function hello(){this.name = 'xjy'; //setTimeout中的this并不会沿着作用域链向上找,而是指向windowsetTimeout(function(){console.log(this.name)}, 100);
}
let obj={name:'obj',hello
}
obj.hello() //window
定时器普通函数内指向window。
解决办法在setTimeout里面bind(this),这样就指向obj了。
5、定时器this指向(箭头函数)
var name='window'
function hello(){setTimeout(()=>{console.log(this.name)}, 100);
}
let obj={name:'obj',hello
}
obj.hello() //obj
定时器箭头函数内this指向调用最外层非箭头函数this
相同,即hello()由obj调用
在promise中
var p = new Promise(function(resolve, reject){console.log(this); // window
}).then(function(){console.log(this); // undefined
})
参考:https://juejin.cn/post/6844903806510039047
面试题之this的指向相关推荐
- 语言的顺序表的合拼_2020语文中考专题五:语言运用和综合性学习。掌握基础题五种题型...
提炼概括题 概括类型题,作为中考试卷中的重点题型,实际上着重考查考生的思维能力和语言表达能力.从试卷分析情况来看,在语言运用题和现代文阅读的相关考点中,考生的提炼概括能力是相对薄弱的,这会造成较多失分 ...
- 【金三银四】 一文弄懂 js 数据类型、堆栈内存、作用域(链)、闭包知识拓展 (一)
引言 对答如流系列篇,关于基本数据类型.堆栈内存.作用域作用域链.闭包 大家好,这里是lionLoveVue,基础知识决定了编程思维,学如逆水行舟,不进则退.金三银四,为了面试也还在慢慢积累知识,Gi ...
- 高级JavaScript第(五)篇
文章目录 ES6语法 ES6相关概念 什么是ES6 为什么使用ES6? ES6新增语法 let 关键字 let 声明的变量只在所处于的块级有限 不存在变量提升 暂时性死区 面试题 小结 const 具 ...
- C语言试题六十二之请编写函数fun除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串第一个字母,形参p已指向字符串中最后一个字母。在编写程序时,不得使用c语言提供的字符串函数。
1. 题目 请编写函数fun除了字符串前导和尾部的*号之外,将串中其他*号全部删除.形参h已指向字符串第一个字母,形参p已指向字符串中最后一个字母.在编写程序时,不得使用c语言提供的字符串函数. 比如 ...
- C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中
1. 题目 请编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中.二 ...
- C语言试题十六之写删除字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
1. 题目 请编写一个函数void function(char a[],char b[], int n),其功能是:删除字符串中指定下标的字符.其中,a指向原字符串,删除后的字符串存放在b所指的数组中 ...
- 经典面试题(3):关于this指向的常见面试题
大年初三凌晨1点,继续我们的经典面试题系列,今天我们了解一下关于函数内部this指向的问题,用一个简单的例子来讲解一下: 看下面的代码,你觉得输出的结果是什么? var myObject = {foo ...
- JavaScript中this的指向问题及面试题你掌握了吗?
this 作为JavaScript中的一个关键字,它的复杂度很高,主要原因是它所处不同场景的代表的指向是不一样的.这里先做一个结论,重要事情说三遍: this的指向是由上下文环境动态决定的 this的 ...
- 【2011年全国试题3】已知循环队列存储在一维数组A[0…n-1],且队列非空时,front和rear分别指向队头元素和队尾元素。若初始时队列为空,且
[2011年全国试题3]已知循环队列存储在一维数组A[0-n-1],且队列非空时,front和rear分别指向队头元素和队尾元素.若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时 ...
最新文章
- (How to)WordPress与Windows Live Writer整合
- ssm框架restful风格实现增删改查
- PHP下载功能的实现和获得当前目录
- Openlayers中加载Geoserver切割的EPSG:900913离线瓦片图层组
- 【NLP】保姆级教程:手把手带你CNN文本分类(附代码)
- sublime的TAB和空格统一
- LVDS收发传输实例
- 解决pycharm运行Flask指定ip、端口更改无效
- 利用反射动态实例化类执行方法并传值
- vue 左右循环滑动_vue实现无缝滚动循环
- 25款有用的桌面版博客编辑器
- JavaScript高级程序设计(第三版)阅读笔记
- MFC动态加载OCX控件
- 51单片机LCD1602电子时钟
- web前端开发教学视频,web前端开发职业
- 什么是亚马逊强关联,亚马逊账号关联详解
- CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]
- SSL/TLS一键配置工具-IISCrypto
- VUE中created被重复调用(每次进入页面之后都会调用created)
- 2020腾讯数分笔试