2.1 值类型、引用类型 const 锁定了什么 首先,我们用 const 声明一个 “常量”,实际是创建了一个不可修改的指针,指向内存中一块区域。我们交给 const“常量”的内容就在这块区域中,所以就是锁定了地址
2.2 2.2.1typeof 能判断哪些类型 基本数据类型+函数 引用类型(函数除外)直接返回对象 //猜测 typeof 判断栈中类型?
2.2.2 手写深拷贝 判断值类型或者引用类型 判断数组还是对象 递归
2.3 变量计算
2.3.1字符串拼接
2.3.2何时使用===何时使用==
==出的问题
//除了== null之外(判断一个对象的属性是null或者是undefined之外),其他都一律用===,例如:
const obj = { X:100 }
if (obj.a == null) { }
//相当于:
// if (obj.aa=== nul1|l obj.a === undefined) { }
除了上述代码,通常用===
值类型和引|用类型的区别
2.3.3 truly变量和falsely变量
3.2 class如何实现继承 extend和原型链继承,都能instanceof
3.3如何理解JS原型(隐式原型和显示原型)
class Student{
}
typeof Student//function
_protype_隐式原型 prototpye 显示原型 实例.protype===Student.prototpye//ture People.prototype===Student.prototype.proto //true
隐式原型像是指针,指向了父级对象Property的prototype
实例有隐式原型
类(构造函数)的Property中含有prototype,prototype包含函数和隐式原型_proto_
类Student的显示原型prototype中有隐式原型_prototype_,可以指向上一层原型
3.4 instanceof时基于原型链实现的
实例.prototype===People.prototype时true
原型链是层层向上找 实例.prototype.prototype.prototype
3.5 JS原型本章相关的面试题
手写jQuery
4.1作用域和自由变量
自由变量:在当前作用域没有被定义,但是使用了,会从定义的地方一层一层向上查找
this
4.2闭包 //返回一个函数
function create(){
const a =100
return function (){
console.log(a)
}
}
const fn =create()
const a=100
fn()//100
函数作为参数
function prinfnt(){
const a =200
fn()
}
let a=100
function fn(){
console.log(a)
}
print(fn)//100
4.3 this
谁调用指向谁
箭头函数在定义时确定
4.4 手写bind
4.5 作用域相关的面试题
闭包的应用
隐藏数据
function createCache(){
const data = {}
return {
get: function(key){
return data[key];
},
set: function(key, value){
data[key] = value
}
}
}
const con = createCache();
con.set('a', 100);
console.log(con.get('a'));
4.6 原型中的this
class Person(){
constructor(name){
this.name=name
}
sayHi(){
console.log('姓名'+this.name)
}
}
实例.proto.function() //姓名 undefined 这个时候时实例._proto_调用这个方法,而不是实例
5.1 同步和异步
// setT imeout 笔试题
console.log(1)
setTimeout( function () {
console.log(2)
},1000 )
console.log(3)
setTimeout( function () {
console.log(4)
}, 0) //0秒
console.log(5) //1 3 5 4 2
//异步处理模块,就是 runtime 提供的,拥有和Js引擎互不干扰的线程
5.2异步场景
网络请求、计时器
5.3Promise的基本使用
5.4 异步相关的面试题
手写Promise的使用加载图片
7.1 BOM操作相关的面试题
从JS到 JS Web API
select attribute
8.1 事件绑定和事件冒泡
普通绑定、代理绑定
//事件绑定、监听点击事件
//监听按钮点击事件
const btn = document. getE lementById( 'btn1' )
btn. addEventL istener('click', event => {
console. log( 'Clicked' )
})
//通用的绑定函数
function bindEvent(elem, type,fn) {
elem. addEventL istener(type, fn)
}
const a = document.getElementById( 'link1' )
bindEvent(a, 'click', e => {
//console.log(e.target) //获取触发事件的元素
e. preventDefault() // 阻止默认行为
alert( 'clicked' )
)
const p1 = document. getElementById( 'p1')
const body = document.body
bindEvent(p1, 'click',e => {
e. stopPropagation() //注释掉这一行,来体会事件冒泡
alert( '激活')
})
bindEvent(body, 'click', e => {
alert( '取消' )
})
body或者div监听点击事件,点击p body和div都会监听到这个事件,和触发这个事件的p元素
8.2事件代理
8.3
9.1 跨域
浏览器的同源策略
服务端可以不受限制
同协议、同域名、同端口
img、link、script可以跨域
9.2 实现跨域的方式
JSONP
CORS服务器设置允许
10.1 如何理解cookie
cookie localStorage sessionStorage的区别
H5新增localStorage sessionStorage
cookie在服务器间传输通讯