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. 异步和单线程 (第四天)的更多相关文章

  1. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  2. 攻略前端面试官(三):JS的原型和原型链

    本文在个人主页同步更新~ 背就完事了 介绍:一些知识点相关的面试题和答案 使用姿势:看答案前先尝试回答,看完后把答案收起来检验成果~ 面试官:什么是构造函数 答:构造函数的本质是一个普通函数,他的特点 ...

  3. 面试 09-02.js运行机制:异步和单线程

    09-02.js运行机制:异步和单线程 #前言 面试时,关于同步和异步,可能会问以下问题: 同步和异步的区别是什么?分别举一个同步和异步的例子 一个关于 setTimeout 的笔试题 前端使用异步的 ...

  4. js介绍,js三种引入方式,js选择器,js四种调试方式,js操作页面文档DOM(修改文本,修改css样式,修改属性)

    js介绍 js运行编写在浏览器上的脚本语言(外挂,具有逻辑性) 脚本语言:运行在浏览器上的独立的代码块(具有逻辑性) 操作BOM 浏览器对象盒子 操作DOM 文本对象 js三种引入方式 (1)行间式: ...

  5. 一天带你入门到放弃vue.js(三)

    自定义指令 在上面学习了自定义组件接下来看一下自定义指令 自己新建的标签赋予特殊功能的是组件,而指定是在标签上使用类似于属性,以v-name开头,v-on,v-if...是系统指令! v-是表示这是v ...

  6. jquery动态加载js三种方法实例

    这里为你提供了三种动态加载js的jquery实例代码哦,由于jquery是为用户提供方便的,所以利用jquery动态加载文件只要一句话$.getScript(\"test.js\" ...

  7. JS三个编码函数和net编码System.Web.HttpUtility.UrlEncode比较

    JS三个编码函数和net编码比较 总结 1.escape.encodeUri.encodeUriComponent均不会对数字.字母进行编码.2.escape:对某些字符(如中文)进行unicode编 ...

  8. JS原型与原型链(好文看三遍)

    一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函数对象. 下面举例说明: function ...

  9. JS三个事件绑定方法

    1. JS三个事件绑定方法 1.1. 使用html进行事件绑定 1.直接在html标签上写入事件类型和事件处理方法. <button onclick = "alert('hello w ...

  10. JS三座大山再学习(三、异步和单线程)

    本文已发布在西瓜君的个人博客,原文传送门 前言 写这一篇的时候,西瓜君查阅了很多资料和文章,但是相当多的文章写的都很简单,甚至互相之间有矛盾,这让我很困扰:同时也让我坚定了要写出一篇好的关于JS异步. ...

随机推荐

  1. 常用的SSH,你了解多少?(长文警告)

    1.SSH工作原理 从ssh的加密方式说开去,看下文 1.1.对称加密 客户端和服务端采用相同的密钥进行数据的加解密,很难保证密钥不丢失,或者被截获.隐藏着中间人攻击的风险 如果攻击者插在用户与远程主 ...

  2. Docker 搭建 Nexus3 私服 | 基本操作

    1 Docker 安装 Nexus3 1.1 创建目录 在硬盘上创建 Nexus3 的主目录: mkdir -p /Users/yygnb/dockerMe/nexus3 为该目录添加权限: chmo ...

  3. 第八十四篇:Vue购物车(五) 商品数量的增减

    好家伙, 1.商品数量的增减 我们把商品的数量增减独立出来,写成一个独立的组件Counter <template> <div class="number-container ...

  4. 【读书笔记】C#高级编程 第十二章 动态语言扩展

    (一)DLR C#4的动态功能是Dynamic Language Runtime(动态语言运行时,DLR)的一部分.DLR是添加到CLR的一系列服务. (二)dynamic类型 dynamic类型允许 ...

  5. Q准则涡识别方法

    Q准则(Q Criterion)在涡识别中计算效率高,效果也不错,是一种常用的涡提取/识别方法. 了解Q准则需要从速度梯度张量入手,而速度梯度张量可以分解成两部分 \[\frac{\partial u ...

  6. 跟羽夏学 Ghidra ——工具

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  7. Python图像处理丨带你认识图像量化处理及局部马赛克特效

    摘要:本文主要讲述如何进行图像量化处理和采样处理及局部马赛克特效. 本文分享自华为云社区<[Python图像处理] 二十.图像量化处理和采样处理及局部马赛克特效>,作者: eastmoun ...

  8. flink-cdc同步mysql数据到kafka

    本文首发于我的个人博客网站 等待下一个秋-Flink 什么是CDC? CDC是(Change Data Capture 变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的 ...

  9. Windows服务器无法配置IP

    前天在给一台服务器配置IP地址的时候发现一个奇怪的问题.IP地址配置之后不生效,还是使用的169.254这个微软保留自动分配地址.由于这个是一台虚拟机,尝试了删除添加网卡也没有用.配置IP不成功的时候 ...

  10. 2022CSP-J初赛游记

    2022年9月16日: 下午,在学校集训,刘洋让我看了一下时间,突然发现,距离初赛就剩2天了...... 晚上,辅导班的老师对我们进行最后的培训,做了2套有道小图灵模拟题,但是做的不理想,很慌. 20 ...