js基础学习笔记

    技术2022-07-10  154

    1. 面向对象与面向过程编程

    它们不是针对某一门编程语言,而是两种解决问题的编程思想面向过程强调的解决问题的步骤,在意的严谨性面向对象强调的以功能划分问题,扩展性比较强

    2. this的指向问题

    写在普通函数调用里,调用时指向window实例化构造函数类时,指向实例谁调用函数,函数里的this就指向谁call()方法改变this的指向,并执行函数 let 新函数 = 函数.bind(对象) // 新函数的this永久指向对象 不执行函数

    3. 箭头函数与普通函数

    箭头函数不能new, 即不能构造类,里面this指向window

    4. eval函数

    很强大的一个函数,可以执行字符串代码在任何情况下我们都应该避免使用 eval 函数。99.9% 使用 eval 的场景都有不使用 eval 的解决方案, 不安全,非常耗性能(2次,一次解析成js语句,一次执行)。但是在严格模式下,又新增了eval作用域。

    5. 函数节流和防抖

    1.短时间内触发次数很多的事件或函数,需要防抖

    防抖示例,在时间间隔内,只有最后一次触发有效

    function debounce(callback, delay = 300) { var timer = null return function() { clearTimeout(timer) timer = setTimeout(callback, delay) } } window.onscroll = debounce(function() { //使用 console.log('调用了1次') }, 500)

    2.也可以用节流来解决

    只有大于上一次触发在规定时间间隔才能触发

    function throttle(callback, delay) { var lastTime = new Date().getTime() return function() { var now = new Date().getTime() if (now - lastTime > delay) { callback() lastTime = now } } } window.onscroll = throttle(function() { //使用 console.log('调用了1次') }, 500)

    6. 作用域链与闭包

    闭包是指有权访问其他函数所定义的变量的函数由于内部函数对外部函数变量还存在着应用,所以在外部函数执行完毕后不会主动将该内存销毁。闭包最重要的用途是实现对象的私有数据。 对象的内部数据无法被轻易的修改,保证了程序的安全性。大量的使用闭包会导致内存泄漏。

    7. prototype与_proto_

    看懂_proto_和prototype的关系及区别

    function Func() {} var func = new Func() console.log(Func.prototype === func.__proto__) // true console.log(Func.prototype.__proto__ === Object.prototype) // true

    Javascript中所有的对象都是Object的实例,并继承Object.prototype的属性和方法

    凡是对象都会有一个属性那就是__proto__,这个__proto__指向的就是他的构造函数的prototype

    那么什么是原型链呢?接着上面的讲,我们都知道对象都有一个toString方法。上述的实例化对象b也可以toString,而实例化对象b本身并没有toString的方法,那他就会沿着它的__proto__向他的构造函数B的prototype对象去找,而这里也没有,那他就会 继续沿着B.prototype.__proto__向上找。而B.prototype.__proto__指向的就是Object.prototype

    8. promise

    9. 深浅拷贝

    深入理解 Javascript 之 JS的深浅拷贝

    基本类型:从一个变量向另外一个新变量复制基本类型的值,会创建这个值的一个副本,并将该副本复制给新变量,所以基本类型进行复制是不会对另外一个变量有影响的引用类型:从一个变量向另一个新变量复制引用类型的值,其实复制的是指针,最终两个变量最终都指向同一个对象浅拷贝:仅仅是复制了引用,彼此之间的操作会互相影响深拷贝:在堆中重新分配内存,不同的地址,相同的值,互不影响

    10. 8种数据结构

    代码面试需要知道的8种数据结构

    11. 垃圾回收机制与内存泄漏

    执行环境负责管理代码执行过程中使用的内存。垃圾收集器会定期(周期性)找出那些不在继续使用的变量,然后释放其内存。但是这个过程不是实时的,因为其开销比较大,所以垃圾回收器会按照固定的时间间隔周期性的执行,通常采用标记清除算法标记清除算法由两个阶段组成: · 第一阶段,标记所有的可访问对象.第一阶段叫做标记阶段. · 第二阶段,垃圾收集算法扫描堆并回收所有的未标记对象.第二阶段叫做收集阶段

    12. js数据类型分析

    基本类型:undefined,null,Boolean,String,Number,Symbol 基本类型值在内存中占据固定大小,保存在栈内存中引用类型:Object,Array,Date,Function,RegExp等 引用类型的值是对象,保存在堆内存中,而栈内存存储的是对象的变量标识符以及对象在堆内存中的存储地址

    13. js异步编程

    因为js是单线程的,等到浏览器执行完当前代码后会看异步队列里面有没有任务 再去执行常用的有setTimeout setIntervel ajax Promise asyc/await先执行微任务 再执行宏任务 宏任务有 定时器 ajax
    Processed: 0.010, SQL: 9