面试 个人摸底监测 考察考察JS三座⼤⼭ 1. 原型和原型链 2. 作⽤域与闭包 3. 异步和单线程 (第四天)
01、如何判断⼀个变量是不是数组?
let arr = [1,2,3,4]
function fun(){
return arr instanceof Array
}
02、如何使⽤class实现继承?
class fu {consructor(name,age)}
class son extends fu{super(...arguments))}
扩展:
//父类
class People {
constructor(name, age) {
this.name = name;
this.age = age;
}
eat() {
console.log("吃吃吃");
}
}
// 子类
class Student extends People {
constructor(name, age) {
super(name, age);
}
sayHi() {
console.log(this.name + " " + this.age);
}
}
let stu = new Student("abc", 20);
stu.eat();
【原型】
console.log(stu.__proto__) 隐式原型
console.log(Student.prototype) 显示原型
console.log(Student.prototype === stu.__proto__)
每个类都有显示原型、每个实例都有隐式原型
实例的隐式原型__proto__指向类的显示原型prototype
【原型链】
console.log(Student.prototype.__proto__)
console.log(People.prototype)
console.log(Student.prototype.__proto__ === People.prototype)

03、this在不同场景下如何取值?
this的值是什么,取决于调⽤什么时候,与定义⽆关
举例:
// 在普通函数
function fn(){
alert(this) // this -> window
}
fn()
// 使⽤ call、apply、bind
let fn2 = fn.bind({a:'abc'})
fn2() // this -> {a:'abc'}
1,以普通函数的形式调用,this是window
2,以对象的方法被调用时,this是调用方法的对象
3,以构造函数形式调用,this是新创建的对象
4,使用call和apply调用时,this是call和apply的第一个参数,如果参数为空,默认指向全局对象
5,全局作用域中this是window
6,箭头函数的this由外层作用域决定
04、⼿写bind函数
Function.prototype.myBind = function(){
let arr = Array.prototype.slice.call(arguments)
let newThis = arr.shift()
let _this = this
return function(){
_this.apply(newThis,arr)
}
}
05、阅读代码,填写结果
function foo(fn){ const a=200; fn()}const a=100;function fn() { console.log(a)}foo(fn) 结果是多少?
100
function foo() {
const a=100;
return function (){
console.log(a)
}
}
const fn=foo();
const a=200;
fn() 结果是??
100
作⽤域 —— 变量的合法使⽤范围。全局作⽤域、函数作⽤域、块级作
⽤域
⾃由变量 —— ⼀个变量在当前作⽤域没有定义,但被使⽤了
闭包(56T) —— 所有⾃由变量的查找,是在函数定义的地⽅向上级作⽤域查找
06、实际开发中闭包的应⽤场景,举例说明
// 隐藏数据,数据被隐藏,外部⽆法访问
function myData(){
let data={}
return {
setData(key, value){
data[key]=value
},
getData(key) {
return data[key ]
}
}
}
闭包就是能够读取其他函数内部变量的函数
07、阅读代码,填写结果
// ⻚⾯中有3个按钮
let aBtn=document.getElementsByClassName('btn')
for (var i=0; i<aBtn.length; i++) {
aBtn[i].addEventListener('click', function (){
alert(i) // 每个按钮点击时,i的值分别是什么?
})
}
3,3,3
当按钮执行的时候,for循环已经执行完了,解决方法用立即执行 (function (){})():这也算一个闭包
for (var i = 0; i < aBtn.length; i++) {
(function (index) {
aBtn[i].addEventListener("click", function () {
alert(index);
});
})(i);
}
08、阅读代码,填写结果
console.log(1)
setTimeout(() => {
console.log(2)
}, 1000)
console.log(3)
setTimeout(() => {
console.log(4)
}, 0)
console.log(5)
1,3,5,4,2
同步和异步的区别是什么?
js是单线程的,同步就是⼀件事做完再做下⼀件事,
异步是多件事情⼀起做
同步阻塞代码执⾏,异步不阻塞代码执⾏
前端常⽤异步场景有哪些?
以下2种情况必须使⽤异步
⽹络请求 ajax
$.ajax(url, function (data){ console.log(data) })
定时任务 setTimeout setInterval
09、⼿写Promise加载⼀张图⽚
let url = '01.jpg' // 地址
function fun (){
let oimg = docments.createElements('img')
return new Promise((res,req)=>{
oimg.src = url
oimg.onload = function (){
res(oimg)
}
oimg.onerror = function (){
req(new Error('失败'))
}
})
}
10、请描述 event loop的机制,可画图
console.log('start')
setTimeout(() => {
console.log('timeout')
}, 5000)
console.log('end'
个人博客地址:http://blog.qianbaiyv.cn/get/my/blog/details/2311887075%40qq.com/121
面试 个人摸底监测 考察考察JS三座⼤⼭ 1. 原型和原型链 2. 作⽤域与闭包 3. 异步和单线程 (第四天)的更多相关文章
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- 攻略前端面试官(三):JS的原型和原型链
本文在个人主页同步更新~ 背就完事了 介绍:一些知识点相关的面试题和答案 使用姿势:看答案前先尝试回答,看完后把答案收起来检验成果~ 面试官:什么是构造函数 答:构造函数的本质是一个普通函数,他的特点 ...
- 面试 09-02.js运行机制:异步和单线程
09-02.js运行机制:异步和单线程 #前言 面试时,关于同步和异步,可能会问以下问题: 同步和异步的区别是什么?分别举一个同步和异步的例子 一个关于 setTimeout 的笔试题 前端使用异步的 ...
- js介绍,js三种引入方式,js选择器,js四种调试方式,js操作页面文档DOM(修改文本,修改css样式,修改属性)
js介绍 js运行编写在浏览器上的脚本语言(外挂,具有逻辑性) 脚本语言:运行在浏览器上的独立的代码块(具有逻辑性) 操作BOM 浏览器对象盒子 操作DOM 文本对象 js三种引入方式 (1)行间式: ...
- 一天带你入门到放弃vue.js(三)
自定义指令 在上面学习了自定义组件接下来看一下自定义指令 自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是v ...
- jquery动态加载js三种方法实例
这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getScript(\"test.js\" ...
- JS三个编码函数和net编码System.Web.HttpUtility.UrlEncode比较
JS三个编码函数和net编码比较 总结 1.escape.encodeUri.encodeUriComponent均不会对数字.字母进行编码.2.escape:对某些字符(如中文)进行unicode编 ...
- JS原型与原型链(好文看三遍)
一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象. 下面举例说明: function ...
- JS三个事件绑定方法
1. JS三个事件绑定方法 1.1. 使用html进行事件绑定 1.直接在html标签上写入事件类型和事件处理方法. <button onclick = "alert('hello w ...
- JS三座大山再学习(三、异步和单线程)
本文已发布在西瓜君的个人博客,原文传送门 前言 写这一篇的时候,西瓜君查阅了很多资料和文章,但是相当多的文章写的都很简单,甚至互相之间有矛盾,这让我很困扰:同时也让我坚定了要写出一篇好的关于JS异步. ...
随机推荐
- 至少要几个砝码,可以称出 1g ~ 40g 重量
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- Mysql_Order_By的坑
CREATE TABLE `tt_transfer_container_pick_config` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, ...
- 干货分享!JAVA诊断工具Arthas在Rainbond上实践~
别再担心线上 Java 业务出问题怎么办了,Arthas 帮助你解决以下常见问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 ...
- 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(20)-Fiddler精选插件扩展安装,让你的Fiddler开挂到你怀疑人生
1.简介 Fiddler本身的功能其实也已经很强大了,但是Fiddler官方还有很多其他扩展插件功能,可以更好地辅助Fiddler去帮助用户去开发.测试和管理项目上的任务.Fiddler已有的功能已经 ...
- 统一建模语言UML---类图
什么是统一建模语言,来看看百科中的介绍统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明.可视化和编制文档的一种标准语言,是非专利的第三代建模 ...
- Hadoop阶段学习总结
第一部分:HDFS相关问题 一.描述一下HDFS的数据写入流程 首先由客户端想NameNode服务发起写数据请求,NameNode接收到请求后会进行基本验证,验证内容包括对请求上传的路径进行合法验 ...
- Windows Admin Center无法访问
近日,有一台安装了Windows Admin Center的服务器无法访问了.遇到错误ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY.本以为这是更新了Chromium内 ...
- 微服务系列之授权认证(三) JWT
1.JWT简介 官方定义:JWT是JSON Web Token的缩写,JSON Web Token是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,可以将各方之间的信息作为JSON ...
- 17. Fluentd输出插件:out_copy用法详解
copy即复制,out_copy的作用就是将日志事件复制到多个输出,这样就可以对同一份日志做不同类型的分析处理. out_copy内置于Fluentd,无需单独安装. 示例配置 <match p ...
- CAS核心思想、底层实现
★ 1.CAS 是什么 CAS 是比较并交换,是实现并发算法时常用到的一种技术.当内存的值和期望的值相等时,进行更新,否则 什么都不做 或 重来 . CAS 的底层实现:是靠硬件实现的,靠硬件的原子性 ...
