前端面试(2)

前端需要注意哪些SEO

合理的title、description、keywords:搜索对着三项的权重逐个减小,title值强调重点即可,重要关键词出现不要超过2次,而且要靠前,不同页面title要有所不同;description把页面内容高度概括,长度合适,不可过分堆砌关键词,不同页面description有所不同;keywords列举出重要关键词即可
语义化的HTML代码,符合W3C规范:语义化代码让搜索引擎容易理解网页
重要内容HTML代码放在最前:搜索引擎抓取HTML顺序是从上到下,有的搜索引擎对抓取长度有限制,保证重要内容一定会被抓取
重要内容不要用js输出:爬虫不会执行js获取内容
少用iframe:搜索引擎不会抓取iframe中的内容
非装饰性图片必须加alt
提高网站速度:网站速度是搜索引擎排序的一个重要指标

事件委托,不冒泡的情况怎么实现事件代理,哪些事件没有冒泡

事件委托就是利用事件冒泡的机制,用父元素代替子元素绑定触发事件

优点:节省内存,不需要给子节点注销事件

网页优化

减少CND查询次数
减少http请求
Ajax本地缓存
压缩css,js
压缩图片

git经常用到的命令,至少五个,并且要说出每个命令是干什么的。

Git init 创建本地仓库
Git add . 把本地文件添加到暂存区
Git commit -m ‘’ 暂存区的内容提交到版本区
Git log 查看日志
Git branch dev 创建分支
Git branch 查看分支

简述ajax 的过程。

  1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象
  2. 创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
  3. 设置响应HTTP请求状态变化的函数
  4. 发送HTTP请求
  5. 获取异步调用返回的数据
  6. 使用JavaScript和DOM实现局部刷新

跨域

因为浏览器出于安全考虑,有同源策略。也就是说,如果协议、域名或者端口有一个不同就是跨域,Ajax 请求会失败

JSONP

JSONP 的原理很简单,就是利用


<script src="http://domain/api?param1=a&param2=b&callback=jsonp"></script>
<script>
    function jsonp(data) {
    	console.log(data)
	} 
</script>

JSONP 使用简单且兼容性不错,但是只限于 get 请求

CORS

CORS需要浏览器和后端同时支持

浏览器会自动进行 CORS 通信,实现CORS通信的关键是后端。只要后端实现了 CORS,就实现了跨域。

服务端设置 Access-Control-Allow-Origin 就可以开启 CORS。 该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源
document.domain

该方式只能用于二级域名相同的情况下,比如 a.test.comb.test.com 适用于该方式。
只需要给页面添加 document.domain = ‘test.com’ 表示二级域名都相同就可以实现跨域
postMessage

这种方式通常用于获取嵌入页面中的第三方页面数据。一个页面发送消息,另一个页面判断来源并接收消息

// 发送消息端
window.parent.postMessage('message', 'http://blog.poetries.com');

// 接收消息端
var mc = new MessageChannel();
mc.addEventListener('message', (event) => {
    var origin = event.origin || event.originalEvent.origin;
    if (origin === 'http://blog.poetries.com') {
        console.log('验证通过')
    }
});

原型

原型链就是多个对象通过 proto 的方式连接了起来。为什么 obj 可以访问到 valueOf 函数,就是因为 obj 通过原型链找到了 valueOf 函数

在这里插入图片描述

Object 是所有对象的爸爸,所有对象都可以通过 __proto__找到它

Function 是所有函数的爸爸,所有函数都可以通过 proto 找到它

函数的 prototype 是一个对象

对象的__proto__ 属性指向原型, proto 将对象和原型连接起来组成了原型链

var、let 及 const 区别

函数提升优先于变量提升,函数提升会把整个函数挪到作用域顶部,变量提升只会把声明挪到作用域顶部
var 存在提升,我们能在声明之前使用。let、const 因为暂时性死区的原因,不能在声明前使用
var 在全局作用域下声明变量会导致变量挂载在 window上,其他两者不会
let 和 const 作用基本一致,但是后者声明的变量不能再次赋值

Class 继承

在 ES6 中,我们可以使用 class 去实现继承,并且实现起来很简单

class Parent {
  constructor(value) {
    this.val = value
  }
  getValue() {
    console.log(this.val)
  }
}
class Child extends Parent {
  constructor(value) {
    super(value)
    this.val = value
  }
}
let child = new Child(1)
child.getValue() // 1
child instanceof Parent // true

class 实现继承的核心在于使用 extends 表明继承自哪个父类,并且在子类构造函数中必须调用 super,因为这段代码可以看成 Parent.call(this, value)

window.onload和$(document).ready

window.onload()方法是必须等到页面内包括图片的所有元素加载完毕后才能执行。

$(document).ready()是DOM结构绘制完毕后就执行,不必等到加载完毕

猜你喜欢

转载自blog.csdn.net/weixin_43931047/article/details/90633700
今日推荐