JavaScript要点
JavaScript要点
为什么说JavaScript是一种轻量级编程语言呢?
从轻量级这个名字不难看出,JavaScript拥有以少量代码来完成高级功能的实现的功能。代码不繁琐,规则很简单。解读起来也很快速。对于函数的调用也十分的便捷。没有过于冗长的代码。所以说它是一门轻量级的编程语言。
JavaScript作用域
- 就是代码名字在某个范围内起作用和效果,目的是为了提高程序的可靠性,更重要的是减少命名冲突
- js的作用域(es6之前):全局作用域、局部作用域
- 全局作用域:整个script标签或者是一个单独的js文件, 比如:
var num=10
- 局部作用域(也叫做函数作用域)在函数内部就是局部作用域,这个代码的名字只能在函数内起效果和作用 ,比如:
function fn(){}
变量作用域的分类
在js中,根据作用域的不同,变量分为两种:全局变量和局部变量
- 全局变量:在全局作用域下的变量
var num=10 //num就是一个全局变量
- 局部变量:在局部作用域下的变量,或者在函数内部的就是局部变量
function fn(){
var num=10 // num就是局部变量 只能在函数内部使用
}
注意:
如果在函数内部,没有声明直接赋值的变量也属于全局变量;
函数的形参 也可以看做是 局部变量
-
从执行效率来看全局变量和局部变量
1、全局变量,只有浏览器关闭的时候才会销毁,比较占用内存
2、局部变量,当我们程序执行完毕后就会销毁,节约资源空间 -
js的作用域有全局、局部,后面再es6中才有块级作用域,
就是{}、if(){}、for(){}
作用域链
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值,这种结构我们称为作用域链 (就近原则);
作用域链的作用:
保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的。
javascript 预解析
js代码是由浏览器中的 javascript 解析器来执行,js解析器在运行 js 代码的时候分为两步,预解析和代码执行;
- 预解析 js引擎会把js中代码里面的 var 还有函数function 提到当前作用域的最前面
- 代码执行,按照代码执行的顺序,从上到下,从左到右执行
预解析分为:
- 变量提升,就是把所有的变量提升到当前作用域的最前面,不提升赋值操作
- 函数提升,就是把所有的函数声明提升到当前作用域的最前面,不调用函数
IIFE是什么
立即执行函数表达式 :IIFE(Immediately-invoked function expression)
1、创建块级(私有)作用域,避免了向全局作用域中添加变量和函数,因此也避免了多人开发中全局变量和函数的命名冲突;
2、IIFE中定义的任何变量和函数,都会在执行结束时被销毁。这种做法可以减少闭包占用的内存问题,因为没有指向匿名函数的引用。只要函数执行完毕,就可以立即销毁其作用域链了;
new 生成一个对象的过程
1、new 构造函数可以在内存中创建了一个空的对象
2、this 就会指向刚才创建的空对象
3、执行构造函数里面的代码 ,给这个空对象添加属性和方法
4、返回这个对象(构造函数里面不需要 return )
通过for in 动态批量的添加属性
call 、apply、bind 之 this 的指向问题
用于处理函数内部的this指向问题。
-
改变this指向的方式
fn.call( target, a,b,c,... )
改变fn的this
指向并执行 fn,第二个参数为任意数量fn.apply( target, [a,b,c,...] )
改变fn的this
指向并执行 fn,第二个参数只能为一个数组,返回值就是函数返回值,因为它就是调用函数。fn.bind( target )
改变fn的this
指向,返回一个函数,由指定this的值和初始化参数改造的原函数拷贝。
function test(a,b){ console.log(this); } test(10,20);// window test.call(document,10,20);//document test.apply(document,arguments);//document const fn = test.bind(document); fn();// document
call 、apply、bind 总结
1、相同点:
- 都可以改变
this
的指向;
2、区别:
call
和apply
会调用函数,并且改变函数内部的this指向;call
和apply
传递的第二个参数不一样,call
是 argu1、argu2。。。
而apply
必须是数组 [ arguments ];bind
不会调用函数,可以改变函数内部的this
指向;
3、主要应用场景:
call
经常用作继承;apply
经常跟数组有关系,比如 借助于数学对象实现数组的最小值等;bind
不调用函数,但是改变this指向,比如定时器内部的 this 指向;
this的指向问题
这些 this
的指向,是当调用函数的时候确定的,调用方式的不同决定了this
的指向不同,一般指向调用者。
调用方法如下: ------------------------------------- this指向如下:
- 普通函数调用 -------------------------------- window
- 构造函数调用 -------------------------------- 实例对象,原型对象里面的方法也指向实例对象
- 对象方法调用 -------------------------------- 该方法所属的对象
- 事件绑定方法 -------------------------------- 绑定事件对象
- 定时器函数 ------------------------------------ window
- 立即执行函数 --------------------------------- window
this指向
函数怎么调用
- 是否通过
new
调用,比如:new request.post()- this指向创建的实例
- 是否通过
.
语法调用: request.post()- this指向
.
前面的对象
- this指向
- 直接调用: post()
- this指向window
闭包
什么是闭包?
闭包(closure)指有权访问另一个函数作用域中变量的函数。——javascript高级程序设计
简单理解就是:一个作用域可以访问另一个函数内部的局部变量。
闭包的主要作用是:延伸了变量的作用范围。
创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部;
闭包的特性:
1.函数内再嵌套函数
2.内部函数可以引用外层的参数和变量
3.参数和变量不会被垃圾回收机制回收
推荐:JavaScript高级程序设计(第3版)中对闭包的解释
递归
什么是递归?
递归函数是在一个函数通过名字调用自身的情况下构成的。
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。简单理解就是:函数内部调用自己,这个函数就是递归函数。但是由于递归很容易发生:" 栈溢出 " 错误(stack overflow ),所以必须要加退出条件 return
。
继承
原型链
简单回顾一下构造函数、原型和实例的关系:
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么,假如我们让原型对象等于另一个类型的实例,结果会怎么样呢?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。这就是所谓原型链的基本概念。
简单来说就是:对象到Object.prototype之间的链条
模块化开发
模块化
-
规范
- CommonJS NodeJS ==>> 同步
const expres = require('express'); const app = express();
- AMD require.js ==>> 异步
- CMD sea.js ==>> 异步
require(['jquery'],function($){ $('.box') })
- ESModule ES6 ==>> 同步
import xxx from './module/xxx.js'
模块化规范
- AMD
- CMD
- CommonJS
- ESModule
好处
- 分工
- 维护
分类
-
框架 ----------- 规范
-
request.js ------- AMD -------- 补充 :jQuery也是可以遵循AMD规范的
-
sea.js ------------ CMD
-
nodejs --------- CommonJS
-
ES6 ----------- ES Module
require('jquery',function(){
// jQuery 代码必须写在里面
$('elem')
})
// 注意:不能用一个变量去接收值,例如如下:
// 这种是错误的 , 因为 require 是异步的。
const $ = require('jquery',function(){
})
$('elem')
CommonJS模块化分类
-
内置模块
不需要安装,直接引用
-
自定义模块
- 定义模块:nodejs把一个文件当作一个模块
- module.exports
- 引用模块:然后通过
require()
方法进行引用- 文件
- 目录
- 查找目录下是否存在package.json,如存在,则查看是否有
main
属性 - 如没有main属性,则查找
index.js
- 如没有index.js,则报
module xxx is not found
- 查找目录下是否存在package.json,如存在,则查看是否有
- 定义模块:nodejs把一个文件当作一个模块
-
第三方模块
- 安装:
npm install xxx
yarn add xxx
cnpm install xxx
- 引用:类似于内置模块
// npm i express const express = require('express'); // require会自动从node_modules目录下查找 const http = require('http')
- 安装:
页面渲染模式
客户端渲染(BSR:Browser Side Render)
- 步骤
- 请求html页面(空页面)
- 浏览器渲染html页面
- ajax请求数据
- 遍历数据并渲染到html页面
- 优点
- 前后端分离
- 用户体验好
- 缺点
- 对SEO(搜索引擎优化)不友好
服务端渲染(SSR:Server Side Render)
- 步骤
- 请求html页面(包含数据的html结构)
- 浏览器渲染html页面
- 优点
- 速度快
- 对SEO友好
- 缺点
- 前后端不分离,对程序员要求较高
- 用户体验不够好
ES6/7/8的新特性
-
ES6新特性:ES 2015
- let/const
- 解构
- 扩展运算符
- 箭头函数
- Promise
- class
- 对象简写
- 模板字符串
- for…of
- Set/Map
- ES Module
-
ES7:ES 2016
- Array.prototype.includes
- 2**16 = 65536
const arr = [10,20,30,NaN] arr.indexOf(20);//1 if(arr.indexOf(20)>=0){ //但是不能用于检测NaN } //Array.prototype.includes 可以检测 NaN
-
ES8: ES 2017
- async/await
javascript 的设计模式
一,单例模式
使用同一个构造函数生成的实例化对象,就算属性和方法相同,生成的也都是不同的实例化对象
解决难点就是同一个构造函数生成同一个实例化对象,防止重复实例化
原理,判断这个构造函数是否使用过,,使用过就返回之前的对象,如果没有那就生成一个实例化对象
解决重复创建的问题
二,组合模式
基本概念,通过一个遥控器,控制所有的入口函数执行
通过构造函数的一个入口定义执行所有的函数方法
在大型项目中,建立大有入口的构造函数可以通过for循环遍历所有的方法,一次性执行
三,观察者模式,又被称为发布和订阅模式
当主体发生改变时,所有依赖与这个主题的相关对象都要发送通知,并且更具程序的需要主动更新数据
要想实现观察者模式,需要5个部分操作
1,有一个主题对象
2,有一个属性(消息盒子)是存储事件
3,有一个方法(on方法)向属性中写入事件
4,有一个方法(emit方法)执行属性中写入事件
5,有一个方法(off方法)删除属性中写入事件
通过构造函数来实现,创建主体对象
观察者模式构造函数
谈谈promise的理解
抽象的说:就是异步编程的一种解决方案;
具体的说:从语法上来说 promise 是一个构造函数、从功能上来说Promise 对象用来封装一个异步操作并可以获取其结果数据。
谈谈ajax的理解
ajax:是在无需重新加载整个网页的情况下,能够实现 局部数据 实时更新 的技术。
1、 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML);
2、它不是新的编程语言,而是一种使用现有标准的新方法;
3、最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容;
4、它不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行;
线程与进程的区别
1、一个程序至少有一个进程,一个进程至少有一个线程.
2、线程的划分尺度小于进程,使得多线程程序的并发性高。
3、另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
4、线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
5、从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
执行上下文与执行栈
简单来说执行上下文就是:代码执行的环境,种类分为三种全局上下文
,函数上下文
,eval执行上下文
;
像with,eval这样的词法作用域欺骗语法就十分消耗性能的本身就不建议使用;执行上下文
async和await的理解 (ES8语法)
async 函数是什么?一句话,他就是Generator 函数的语法糖 ;
最简单的使用就是省掉了then 简单快捷;
await的那句代码,会等待成功,拿到解决,才会执行下面的语句;
这样的代码看起来清晰;
async和await 原理是 generate + yield 的语法糖
HTML 和 CSS要点
href 和 src 的区别
- href (Hypertext Reference)指定网络资源的位置,从而在当前元素或者当前文档和由当前属性定义的需要的锚点或资源之间定义一个链接或者关系。(目的不是为了引用资源,而是为了建立联系,让当前标签能够链接到目标地址。)
- src source(缩写),指向外部资源的位置,指向的内容将会应用到文档中当前标签所在位置。
href与src的区别:
- 请求资源类型不同:href 指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的联系。在请求 src 资源时会将其指向的资源下载并应用到文档中,比如 JavaScript 脚本,img 图片;
- 作用结果不同:href 用于在当前文档和引用资源之间确立联系;src 用于替换当前内容;
- 浏览器解析方式不同:当浏览器解析到src ,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等也如此,类似于将所指向资源应用到当前内容。这也是为什么建议把 js 脚本放在底部而不是头部的原因。
link和@import的区别
- link 是 XHTML 标签,除了加载CSS外,还可以定义 RSS 等其他事务;@import 属于 CSS 范畴,只能加载 CSS。
- link 引用 CSS 时,在页面载入时同时加载;@import 需要页面网页完全载入以后加载。
- link 是 XHTML 标签,无兼容问题;@import 是在 CSS2.1 提出的,低版本的浏览器不支持。
- link 支持使用 Javascript 控制 DOM 去改变样式;而@import不支持。
浏览器的运行机制
- 构建DOM树(parse):渲染引擎解析HTML文档,首先将标签转换为DOM树中的DOM node(节点,包括js生成的标签),生成内容树(content tree/ dom tree);
- 构建渲染树(construct):解析对应的css样式 文件信息(包括js 生成的样式和外部css文件),而这些文件信息以及HTML中可见的指令(如< b > < /b> ),构建渲染树(rendering tree / frame tree);render tree 中的每个node都有自己的style ,而且render tree 不包含隐藏的节点(比如display:none的节点,还有head节点),因为这些节点不会用于呈现;
- 布局渲染树(reflow / layout):从根节点递归调用,计算每一个元素的大小、位置等 给出的每个节点所应该在屏幕上出现的精确坐标;
- 绘制渲染树(paint / repaint):遍历渲染树,使用UI层来绘制每个节点;
重排和重绘
1、重绘(repaint 或 redraw )
当盒子的位置、大小、以及其他属性,例如颜色、字体大小等都确定下来之后,浏览器便把这些原色都按照各自的特性绘制一遍,将内容呈现在页面上。
重绘是指一个元素外观的改变所触发的浏览器行为,浏览器会根据元素的新属性重新绘制,使元素呈现新的外观。
触发重绘的条件:改变元素外观属性。如:color、background-color等
注意:table 及其内部元素可能需要多次计算才能确定好其在渲染树中节点的属性值、比同等元素要多花两倍的时间,这就是我们尽量避免使用table布局页面的原因之一。
2、重排(重构 / 回流 / reflow )
当渲染树中的一部分(或者全局)因为元素的规模大小、布局,隐藏等改变而需要重新构建,这就称为回流(reflow),每个页面至少需要一次回流,就是在页面第一加载的时候。
3、两者关系:
在回流的时候,浏览器会使渲染树中受到影响的部分生失效,并重新构建这部分渲染树,完成回流后,浏览器会重新绘制受影响的部分到屏幕中,该过程称为重绘,所以重排必定会引发重绘,但重绘不一定引发重排。
4、触发重排的条件:任何页面布局和几何属性的改变都会触发重排,比如:
- 页面的渲染初始化(无法避免)
- 添加或删除可见的DOM元素
- 元素位置的改变,或者使用动画
- 元素尺寸的改变—— 大小、外边框、边框
- 浏览器的窗口尺寸的变化(resize事件发生时)
- 填充内容的改变,比如文本的改变或者图片大小改变引起的计算值宽度和高度的改变
- 读取某些元素属性 (offsetLeft / Top/ Heigth/ Width、clientTop / Left / Width / Heigth、scrollTop / Left / Width / Heigth 、 width/ heigth 、get ComputedStyle()、currentStyle(IE) )
重绘重排的代价:耗时、导致浏览器卡、慢
jQuery中要点
jq的链式调用
jq的方法都是挂在原型的,那么如果每次在内部方法返回this,也就是返回实例对象,那么就可以继续调用原型上的方法了,这样的就节省代码量,提高代码的效率,代码看起来更优雅。
但是也会出现一个问题:所有对象的方法返回的都是对象本身,也就是说没有返回值,所以这种方法不一定在任何环境下都适合。
或者
实现链式的基本条件就是要实例对象先创建好,调用自己的方法。
链式调用是通过 return this
的形式来实现的。通过对象上的方法最后加上 return this
,把对象再返回回来,对象就可以继续调用方法,实现链式操作了。
HTTP
一次完整的HTTP服务过程
当我们在web浏览器的地址栏中输入:www.baidu.com 会发生什么?
1、对www.baidu.com 这个网站进行DNS域名解析,得到对应的IP地址
2、根据这个IP,找到对应的服务器,发起TCP的三次握手
3、建立TCP连接后发起http请求
4、服务器响应http请求,浏览器得到HTML代码
5、浏览器解析HTML代码,并请求HTML代码中的资源,如js,css,图片等(注意:先得到HTML代码,才能继续后面请求)
6、浏览器渲染HTML
7、服务器关闭连接 tcp http
面试题
技术无关问题:
- 首先做一下自我介绍?
- 你为什么离职?
- 你为什么学web前端?
- 你怎么学的web前端?
- 你的未来职业规划是什么?
- 你对我们公司有什么样的了解?
- 你还想对我们公司做哪些了解?
- 你以前项目中遇到最难的问题是什么?
- 你们以前公司有多少人
- 你们以前公司有多少个技术 ,多少个前端
- 你们以前公司的主要业务是什么
- 你们以前公司一个月大概接多少个项目?
- 原来公司工作流程是怎么样的,如何与其他人协作的?如何跨部门合作的?
- 你遇到过比较难的技术问题是?你是如何解决的?
- 你为什么要转行?
- 你的优缺点?
- 你能接受加班吗?
- 前端工作需要什么能力?
技术相关问题:
html和css:
- CSS浮动怎么理解的
- 绝对定位相对定位怎么理解3. 块元素和行内元素什么区别
- Css如何实现盒子水平垂直居中
- Href 和 src的区别
- Px和Rem的区别
- 常见的浏览器内核和前缀有哪些? 微信的浏览器内核是什么
- html5中新增哪些api
- html5新增哪里标签
- 移动端怎么做适配
- 你们以前移动端是怎么写的
- 你们以前移动端是怎么布局的
- 你对语义化标签是怎么理解的?有什么好处?
- Css3动画有哪些
- 使用 CSS 预处理器吗?喜欢那个?
- CSS优化、提高性能的方法有哪些?
- 怎么让Chrome支持小于12px 的文字
- CSS3有哪些新特性?
- html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分
HTML和HTML5? - ::before 和 :after中双冒号和单冒号 有什么区别?
- 说下遇到的各种兼容性的处理方法?
- Html盒模型的不同?
- 响应式布局
- 透明度opacity和rgba的区别?
- 兼容IE8以下的浏览器你是如何编写css样式的
- 移动端项目开发过程中你遇到过哪些兼容行问题,你们一般兼容哪些浏览器
javascript
- Ajax同步和异步怎么理解的
- Js面相对象是怎么理解的
- Js写过原生插件吗?
- Js闭包是如何理解的
- apply和call的区别
- js中数组后面添加数据 数组前面添加数据 数组后面删除数据 数组前面删除数据用什
么? - 请描述一下cookies,sessionStorage和localStorage的区别?
- 你对localStorage是怎么理解的?
- 跨域请求是怎么理解的?
- Post和get的区别是怎么理解的?
- 什么情况下面存在跨域
- 你如何处理后台接口返回的数据
- 开发过程中遇到的内存泄露情况,如何解决的?
- 网站如何优化?
- 网站加载速度慢如何优化
- 网站seo优化有哪些方法?
- 一次完整的HTTP事务是怎样的一个过程?
- 你以前用过哪些js库和框架
- ajax请求时,如何解释json数据
- 如何阻止事件冒泡和默认事件
- 解释jsonp的原理,以及为什么不是真正的ajax
- ” == ”和“ ===” 的不同
- javascript的同源策略
- 你知道的jquery插件有哪些
- 你们公司前后端是如何配合工作的?
- Javascript如何实现继承?
- Javascript创建对象的几种方式?
- JQuery的源码看过吗?能不能简单概况一下它的实现原理?29. jquery中如何将数组转化为json字符串,然后再转化回来?
- 谈一下Jquery中的bind(),live(),delegate(),on()的区别?
- Jquery与jQuery UI有啥区别?
- Zepto如何理解的
- requireJS是怎么理解的
- jQuery的优点
- 懒加载的原理?
- 数组的所有遍历方法,包括es6
- 说下事件委托是什么?有什么好处?
- 开发过程中有什么编码规范?
- 实现多个标签页的通信?(就是localStorage和cookie)
- 在浏览器中输入url到整个页面显示在用户面前时,这个过程发生了什么?
- 常见的http请求方式,以及区别?
- 记住几个常用的状态码(200,400,401,404,500)
- Es6你用过什么?具体说下
- 你对前端工程师的理解是什么?在代码方面有什么难度?
进阶框架:
- 你对MVC、MVVM的理解?
- 你知道哪些htlm5的移动端框架。
- 知道各种JS框架(Angular, Backbone, Ember, React, Meteor, Knockout…)么? 能讲出他们各
自的优点和缺点么? - 常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?
- 你怎么看待Web App 、hybrid App、Native App?
- 你移动端前端开发的理解?(和 Web 前端开发的主要区别是什么?)
- 平时如何管理你的项目?
- 说说最近最流行的一些东西吧?常去哪些网站?
- 简单描述一下你做过的移动APP项目研发流程?10. 你认为怎样才是全端(全栈式)工程师(Full Stack developer)?
- 介绍一个你最得意的作品吧?
- 项目中遇到国哪些印象深刻的技术难题,具体是什么问题,怎么解决?
- 最近在学什么?能谈谈你未来3,5年给自己的规划吗?
- 模块化开发如何理解的。
- 如何提高网站性能
- 怎么实现js的模块化编程?
- 你有上线项目吗?
- 对React很理解
- 对Vue的理解
- 对面向对象很理解
- 你的项目,Redux怎么分层
- socket断开后,如何重连
- 如何实现vue无限级树型导航(2种及以上方法)
- 嵌套路由和嵌套组件是否由区别:
- 表格封装是思路需要的注意思想
- v-model
- vuex 组件A和组件B,组件A由渲染,B没有, 问题:组件A能不能拿到组件B的数据
- 继承和原型链继承的优点
- vue data和method里面的this指向是否一样
- post收不到数据什么原因
- vue-resource和拦截器
- vue-route 路由拦截是?
- route的底层实现原理
- 数据驱动的原理
- {{}}插值法的实现原理
- cordova
- canvas38. mangodb的了解
- mangodb和mysql的对比
- swiper插件
- vue通信的几种方法
- 前端跨域解决方法
- CORS 与 JSONP 的对比
- vue 混合
- vue的生命周期
- 前端的优化
- vue页面缓存
- watch 监听不到变化
- vue的坑
- 跨域是什么?解释下解决跨域的方法?关于vue的跨域有什么解决方法?
- Vue插件的封装的一些思路,怎么做?
- 在vue项目上遇到的一些比较难的问题,怎么解决的?
- Vue组件之间的通信方式?
- Vue和react的对比?
- 虚拟dom的原理?为什么虚拟dom比操作dom节点好?
- 双向绑定的原理,和react的单向数据流有什么区别?
- Vue路由跳转方式?动态路由以及参数的传递
- 关于vue的webpack的配置?
- elementUI和ant Design有什么不同的地方?
- Keep-alive缓存
- 如果有一个数组对象生成的列表页,里面所有列表项都可以拖拽改变位置,同时如何得到位置
改变后的数组? - 平时有封装过什么组件?
- 项目中的优化方法有什么?
- 有个搜索框,在搜索框中输入内容,找到当前页面的需要搜索的数据?65. active-class 是哪个组件的属性?
- 嵌套路由怎么定义?
- 懒加载(按需加载路由)
- vuex 是什么?怎么使用?哪种功能场景使用它?
- vue-router 有哪几种导航钩子?
- 自定义指令(v-check, v-focus) 的方法有哪些? 它有哪些钩子函数? 还有哪些钩子函数参数
- 说出至少 4 种 vue 当中的指令和它的用法
- vuex 有哪几种属性
- vuex 的 store 特性是什么
- vuex 的 getter 特性是什么
- vuex 的 mutation 特性是什么
- vue 中 ajax 请求代码应该写在组件的 methods 中还是 vuex 的 action 中
- 不用 vuex 会带来什么问题
- 使用 Vuex 只需执行 Vue.use(Vuex),并在 Vue 的配置中传入一个 store 对象的示例,store
是如何实现注入的?美团 - state 内部支持模块配置和模块嵌套,如何实现的?美团
- 在执行 dispatch 触发 action(commit 同理)的时候,只需传入(type, payload),action 执
行函数中第一个参数 store 从哪里获取的?美团 - Vuex 如何区分 state 是外部直接修改,还是通过 mutation 方法修改的?美团
- 调试时的"时空穿梭"功能是如何实现的?美团
- axios 是什么?怎么使用?描述使用它实现登录功能的流程
- 你最有成就感的项目是哪个
- 如果让你负责一个项目,你是如何进行技术选型
- 移动端项目需要考虑什么问题
- 说说实现摇一摇功能的思路
- 多人聊天系统中如何实现实时更新功能
- 简述项目流程
- 如何部分引入bootstrap的功能91. 点餐系统中如何实现实时显示点餐进度
- webpack与gulp的区别
- vue中data与computed的区别
- 如何设置对象属性为只读
- 如何扩展原型对象的方法
- webapp中如何实现下拉刷新
- webapp中如何实现上拉加载更多
- 移动端touch事件与click事件的区别
- 移动端如何实现页面缓存
- 移动端如何实现瀑布流效果
- 现有浏览器不支持ES6,如何解决
- 如何解决图片在不同分辨率下的显示问题,避免失真
- 图片上传前如何实现缩略图功能
- 你是如何解决git冲突问题
- 乱码最根本的原因是什么
- 移动端如何显示轮播图拖拽显示功能
- nodejs如何罗列硬盘上的文件与文件夹
- webapp中如何实现语音搜索功能
- 项目开发中如何确定版本号
- 简述viewport的作用,并说明如何实现字体在不同分辨率下的适配
- hybrid App如何显示数据请求问题
- 在项目中你们是如何实现支付功能
- 移动端屏幕无法显示完全所有栏目时如何实现tap便签切换功能
- 如何实现表格固定表头功能(最顶部与最左侧)
- 什么场景下会用到路由嵌套
- webpack中实现代码压缩如何避免某些关键字压缩,如define,require等
- 在对象中说说你对值属性和存储属性的理解
- 如何理解二次封装,它有什么好处119. 如何实现在多个sass文件中不编译某个scss文件
- 项目开发过程中如何解决安全性问题
- nodejs如何实现一个服务器并解决html、图片等显示问题
以上要点不按照顺序提出,有什么错误或补充评论区见