知识总结

188 阅读4分钟

jq的ready方法和window.onload的区别

  1. 加载时机:window.onload()必须等待网页全部加载完毕(包括图片等),然后在执行JS代码;ready只需要等待网页中的dom结构加载完毕,就能执行JS代码

  2. 执行次数:onload只能执行一次,如果第二次,那么第一次的执行会被覆盖;ready可以执行多次,不会覆盖上一次

  3. window.onload = function(){alert('111')}

    window.onload = function(){alert('222')}

    结果只输出第二个

    $(document).ready(function(){alert('333')})

    $(document).ready(function(){alert('444')})

    结果两次都会输出

  4. $(document).ready()可以简写为$(function(){})

$的作用

  1. 参数为函数:当DOM加载完毕后,执行此回调函数

    $(function(){})

  2. 参数作为选择器字符串:查找多有匹配的标签,并封装成JQuery对象

    $('p') $('#id') $('.class')

  3. 参数作为dom对象:将dom对象封装成jQuery对象

    $(document.getElementsByTagName('div'))

    以上是作为一般函数调用,$(参数)

  4. 作为对象使用:$.xxx()

    $.each()隐式遍历数组 $.trim()去除两端空格

jq的链式操作是如何实现的?为什么要用链式操作?

  • 链式操作仅仅是通过对象上的方法最后return this把对象在返回回来,对象可以继续调用方法,这就是链式操作。
    
  • 为了更好的异步体验。javascript是无阻塞语言,所以他不是没阻塞,而是不能阻塞,所以他需要通过事件来驱动,异步完成一些本需要阻塞进程的操作。
    

前端解决跨域的方法

  1. jsonp跨域:利用script标签没有跨域限制,通过script标签src属性,发送带有callback参数的GET请求,服务端将接口返回数据拼接到callback函数中,返回给浏览器,浏览器解析执行,从而前端拿到callback函数返回的数据
  2. jQuery的ajax实现:$.getJson()
  3. 后端通过代理实现
  4. 跨域资源共享:添加cors请求头,就是在头部信息中增加一个origin字段

原生ajax请求

  1. 创建XMLHttpRequest对象
  2. 注册回调函数
  3. 配置请求信息
  4. 发送请求
  5. 创建回调函数

vue的常见标签有哪些?

vue的组件通信

html结构语义化的理解

  • 根据内容的结构化(语义化),选择合适的标签(代码语义化)便于开发者阅读和写出更优雅的代码,同时让浏览器的爬虫和机器很好的解析

柯里化函数

  • curring,是把接受多个参数的函数变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下参数而且返回结果的新函数的技术。

  • 使用场景:参数重复,同一个参数可能很多次调用都会用到,因此造成参数重复

    function uri_curring (protocol){

      return function(hostname,pathname){
      
          return `${protocol}${hostname}${pathname}`;
          
         }
    

    }

    const uri_https = uri_curring("https://");

    console.log(uri_https);

    const uri1 = uri_https("www.csdn.net","/blog");

    console.log(uri1);

  • 经典面试题

function currying(fn,length){
    return function(...args){
        if(args.length>=length){
            return fn(...args)
        }
        // bind()函数既保留了上一个调用的参数,又返回一个新函数
        return currying(fn.bind(null,...args),length-args.length)
     }
}

function add(...args){
  return args.reduce((a,b)=>a+b)
}

add = currying(add,5) // 一共有几项length就是几

console.log(add(1)(2)(3)(4,5)); // 15

判断数据类型的方法?如果都是object数据类型怎么区分是函数还是数组?

同步加载和异步加载的区别?

setTimeout和promise的区别?

箭头函数和普通函数的区别?

call和apply可以改变箭头函数的this吗?

不可以但是可以改变父级作用域环境

普通函数的调用方法?

原型和。。。的区别?

构造函数及它引用者之间的关系?

vue的生命周期函数

事件循环的处理机制


bfc布局

封装一个函数实现对不同数据类型的深拷贝

性能优化的方法有哪些

url从输入开始都经历了什么?


rem的使用

实现数组的深拷贝

vue的Keep-alive

v-model的实现原理

v-if和v-show的区别?能否一起使用?优先级是什么?

vuex

vue的ajax拦截器

vue路由的两种模式

vue间的传值方式

计算属性和watch的区别

es6使用过哪些?

map可以改变数组的值吗?


语义化标签及作用

  • 根据内容的结构化语义化,选择合适的标签,便于开发者阅读和写出更优雅的代码,与此同时也能让浏览器的爬虫和机器更好的解析。
  • 为什么要语义化?
  1. 为了没有css时,页面也能呈现很好的内容结构、代码结构为裸奔时更好看。

  2. 用户体验:例如title、alt用于解释名词或图片信息,label标签的活用

  3. 有利于SEO,和搜索引擎建立良好沟通,有助于爬虫抓取更多有效信息,爬虫依赖标签来确定上下文和各个关键字的权重

  4. 方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页

  5. 便于团队的开发和维护,语义更具可读性,是下一步网页的重要动向,遵循w3c标准的团队都遵循这个标准,可以减少差异化

    header footer nav aside section article

函数作用域

html组成

事件代理及使用场景,事件委托及使用场景

定位方式及描述,定位后会有什么影响

伪元素和伪类之间的区别

vue的原理是基于js的那个内容

数组的解构赋值及使用场景

let、const和var的区别?const定义的变量可以改变吗?改变了会怎样?


冒泡和捕获的过程

HTTPS缓存机制

数组forEach和map之间的区别

promise相关

箭头函数this的指向和普通函数的区别

垂直居中实现的方法,重点弹性盒

$nextTick

实现{a:{b:2}}的拷贝

对象的深拷贝方法


变量提升

清除浏览器缓存的方法

盒模型

实现一个向右的三角形

箭头函数的理解

mvvm的理解

宏任务和微任务的区别

this指向的问题

闭包