jq的ready方法和window.onload的区别
-
加载时机:window.onload()必须等待网页全部加载完毕(包括图片等),然后在执行JS代码;ready只需要等待网页中的dom结构加载完毕,就能执行JS代码
-
执行次数:onload只能执行一次,如果第二次,那么第一次的执行会被覆盖;ready可以执行多次,不会覆盖上一次
-
window.onload = function(){alert('111')}window.onload = function(){alert('222')}结果只输出第二个
$(document).ready(function(){alert('333')})$(document).ready(function(){alert('444')})结果两次都会输出
-
$(document).ready()可以简写为$(function(){})
$的作用
-
参数为函数:当DOM加载完毕后,执行此回调函数
$(function(){}) -
参数作为选择器字符串:查找多有匹配的标签,并封装成JQuery对象
$('p') $('#id') $('.class') -
参数作为dom对象:将dom对象封装成jQuery对象
$(document.getElementsByTagName('div'))以上是作为一般函数调用,$(参数)
-
作为对象使用:$.xxx()
$.each()隐式遍历数组$.trim()去除两端空格
jq的链式操作是如何实现的?为什么要用链式操作?
-
链式操作仅仅是通过对象上的方法最后return this把对象在返回回来,对象可以继续调用方法,这就是链式操作。 -
为了更好的异步体验。javascript是无阻塞语言,所以他不是没阻塞,而是不能阻塞,所以他需要通过事件来驱动,异步完成一些本需要阻塞进程的操作。
前端解决跨域的方法
- jsonp跨域:利用script标签没有跨域限制,通过script标签src属性,发送带有callback参数的GET请求,服务端将接口返回数据拼接到callback函数中,返回给浏览器,浏览器解析执行,从而前端拿到callback函数返回的数据
- jQuery的ajax实现:$.getJson()
- 后端通过代理实现
- 跨域资源共享:添加cors请求头,就是在头部信息中增加一个origin字段
原生ajax请求
- 创建XMLHttpRequest对象
- 注册回调函数
- 配置请求信息
- 发送请求
- 创建回调函数
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可以改变数组的值吗?
语义化标签及作用
- 根据内容的结构化语义化,选择合适的标签,便于开发者阅读和写出更优雅的代码,与此同时也能让浏览器的爬虫和机器更好的解析。
- 为什么要语义化?
-
为了没有css时,页面也能呈现很好的内容结构、代码结构为裸奔时更好看。
-
用户体验:例如title、alt用于解释名词或图片信息,label标签的活用
-
有利于SEO,和搜索引擎建立良好沟通,有助于爬虫抓取更多有效信息,爬虫依赖标签来确定上下文和各个关键字的权重
-
方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页
-
便于团队的开发和维护,语义更具可读性,是下一步网页的重要动向,遵循w3c标准的团队都遵循这个标准,可以减少差异化
header footer nav aside section article