JS

164 阅读3分钟

2.1 值类型、引用类型 const 锁定了什么 首先,我们用 const 声明一个 “常量”,实际是创建了一个不可修改的指针,指向内存中一块区域。我们交给 const“常量”的内容就在这块区域中,所以就是锁定了地址

2.2 2.2.1typeof 能判断哪些类型 基本数据类型+函数 引用类型(函数除外)直接返回对象 //猜测 typeof 判断栈中类型?

2.2.2 手写深拷贝 判断值类型或者引用类型 判断数组还是对象 递归

2.3 变量计算

2.3.1字符串拼接

2.3.2何时使用===何时使用==

==出的问题 =.png

//除了== 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

原型链.png

隐式原型像是指针,指向了父级对象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在服务器间传输通讯