es6面试考点

参考网站:

Module 的语法(import,import(),export,AMD, CommonJS )

https://blog.youkuaiyun.com/juse__we/article/details/88937220

class及class的继承,prototype.与__proto__的概念,mixin的实现

https://blog.youkuaiyun.com/juse__we/article/details/89226464

对promise的理解:
https://blog.youkuaiyun.com/juse__we/article/details/88900685

iterator(迭代器):

https://blog.youkuaiyun.com/juse__we/article/details/88912579

generator(生成器):

https://blog.youkuaiyun.com/juse__we/article/details/88912300

异步遍历器(iterator)和异步生成器(generator)

https://blog.youkuaiyun.com/juse__we/article/details/104288194


关于async的理解:

https://blog.youkuaiyun.com/juse__we/article/details/88903608
在vue 里面的异步(axios)

https://blog.youkuaiyun.com/juse__we/article/details/88795582

Proxy

https://blog.youkuaiyun.com/juse__we/article/details/104239817

Reflect

https://blog.youkuaiyun.com/juse__we/article/details/104253737


5.ES6新增的类型(map,set )

https://blog.youkuaiyun.com/juse__we/article/details/88930457

7.操作日期的API
代码:(常用的就这几个)
let TheDay=new Date();
let year=TheDay.getFullYear();
let mounth=('00'+(TheDay.getMonth()+1)).slice(-2);
let day=('00'+TheDay.getDate()).slice(-2);
console.log(year+'-'+mounth+'-'+day)

//获取今天星期几
let weekend=['星期日','星期一','星期二','星期三','星期四','星期五','星期六']
console.log( TheDay.getDay(),weekend[TheDay.getDay()])
8.切割字符串的使用
let str='hello world';
console.log(str.slice(-2))
9.你开发过vue的插件吗
官方的流程:
https://cn.vuejs.org/v2/guide/plugins.html
自己写vue插件的流程
    1.main.js
        1.导入vue的插件文件
            import Loading from '/loading'   //loading 目录下面有index.js文件   
        2.显式的全局引用插件:
            Vue.use(Loading)
        3.不需要注入子组件    
    2.在子组件里面引用:
        <loading>  </loading>  //直接使用好像就可以    
    3.插件的写法:
        1.插件模板的写法:./loading.vue  --vue文件
            正常的组件写法:
                <template><div>正在加载中....</div></template>
                <script> export default {}</script>
                <style scoped></style>
        2.在loading文件夹下面index.js
            1.引入vue的模板文件
                import LoadingComponent from './loading'
            2.核心部分,在使用Vue.use()的时候,自动调用install
                const Loading={
                    install:function(Vue){
                        Vue.component('loading',LoadingComponent)   // loading就是插件名 随便起 
                    }
                }
            3.导出组件 
                export default Loading

11,遍历对象的方法
for in 不要使用for of + object.keys(obj)
12.数组和对象解构
let {a,d}={a:12,d:[13,14]}
还有就是  ... 的使用
代码:
function add(...arr) {
  console.log(arr);
  console.log(arguments);
  //arguments  不是数组的,不可以使用数组的方法的

}
add(1,2,3,4,5,6,7,8);
13.模板字符串的使用
代码:
var c=` ${a+d}======${ b }===${++a}

  hello

  world
`;
理解:
` ${ 写计算  } 
在里面,字符串是可以随便换行的

14.ES6  对于 数组,字符串的扩展
https://www.haorooms.com/post/es6_string_object_array
这个之前也是学过的,但是 基本都忘了   mmp ...
16.vue 的传值
1.使用父子组件传值
2.使用vuex
3.使用bus 来进行传值
https://juejin.im/post/5a4353766fb9a044fb080927
17.事件的委托
事件捕获--->目标对象---->向上冒泡
18.vuex的实现原理
就是那张图

19.谈谈你对vue的理解
mvvm
vue的生命周期

生命周期的理解:
vue的说明周期
    beforeCreate:创建之前
        这个阶段数据是读不到的,时间段,刚调用初始化函数  new...
    created:创建之后
        完成了数据观测,属性和方法的运算,但是没有挂在$el
        所以没有渲染在DOM树上,
        初始化完成....
    beforeMounted:安装之前
        挂载之前调用,在之前,寻找编译的模板和虚拟挂在节点
        在他之前,执行的动作
            1.找el:"'或者vm.$mount(""),确定虚拟挂在点
            2.找template或者 直接找外部的挂载点,确定挂在位置
    mounted:安装之后
        在此之前,执行的动作:
            el选项的节点,被$el代替(挂在到了DOM树上),已经挂载完成(渲染完毕)
            数据被渲染了,render(第一次)执行完毕
    beforeUpdate:更新之前
        有数据更新的时候,立即触发:
            不进行DOM的渲染,执行时间,当有数据更新之后,立马执行
    updated:更新之后
        绑定的数据进行更新(渲染),并且渲染DOM
        之前的动作:
            虚拟DOM的渲染和关在完成
    beforedestroy:销毁之前
        实例销毁之前,调用销毁函数,但没有执行销毁函数
        调用销毁函数,立即执行:
            在此之前,销毁函数被调用
    destroy:销毁之后
        在这个事件点之前:
            VUE实例销毁
            数据,方法,组件..的解绑
            
================================
        生命周期阶段,实例生命中的是时间点,在这个时间点执行函数
        
        mounted:function(){
            ................
        }
        
20.web socket的理解
https://mp.weixin.qq.com/s?__biz=MjM5MTA1MjAxMQ==&mid=2651227675&idx=1&sn=024b01082bef3b344edcca5f92bafb55&chksm=bd495f9f8a3ed689dc585d0a27f42dd5c787e974da2a5f22938f8a32de1b43c739f49b1b399a&scene=0#rd
21, https协议的理解
https://mp.weixin.qq.com/s?__biz=MzAwNDcyNjI3OA==&mid=2650840874&idx=1&sn=d2fe0b2f1efa77f79c28e380fd221ceb&chksm=80d3b443b7a43d55cc9437b2c3bd3b46c121acb0eb21c57f4ce08578e21d1788306b0c7a3aa3&scene=0#rd
TCP连接,http,https,udp,webSocket  ...
22.web woker
https://mp.weixin.qq.com/s?__biz=MzI1ODE4NzE1Nw==&mid=2247486700&idx=1&sn=9ed4fb635f55002bab7f322eb753bc17&chksm=ea0d4616dd7acf009cddea635890c8586e5a9cab9fe0e6b16925bd54f496a884dd685677df2b&scene=0#rd
23.谈谈你对const 和let 的理解
const (常量标识):
初始化,必须赋值  
常量的名称 默认为大写
常量不可以再次被修改的(否则,直接报错)
let:
js 函数的作用域问题
let是块级作用域,不进行声明提前
代码:(比较这两者的区别 )
使用var 变量的声明提前
{
    console.log(str)  // hello world
    var str = 'hello world'
}
使用let 直接报错,没有声明提前,就没有定义这块内存
{
    console.log(str) // undefined
    let str = 'hello word';
}
还有:
let 声明一个变量,在同一个作用域里面 ,只能声明一次
否则报错:
Uncaught SyntaxError: Identifier 'str' has already been declared
下面的写法,是可以的  因为他们不是一个作用域
let a = '666'

function fun() {
    let a = '777'
    console.log(a)
}

fun();
24, 变量提升的理解(hoisting)
1.变量提升只是提升变量的声明,并不会把赋值也提升上来。
代码测试:
bar();
var foo = 1;
function bar() {
    console.log(foo)   //undefind
    if (!foo) {
        var foo = 10;
    }
    console.log(foo);  //打印10
}
理解:
function 变量名 (){   }    可以进行声明提升
2.先提升函数  ,之后提升使用var  声明的变量;
foo();   //输出1
function foo() {    //先提升函数(函数整个提升)
    console.log('1');
}
var foo = function () {    //提升变量 var foo;  之后的函数不会被提升的
    console.log('2');
}
foo();    //输出2

<think> 首先,用户的要求是:“我想获取JavaScript和Vue 2在面试方面的考点精讲内容”。所以,我需要提供关于JavaScript和Vue 2面试考点的精讲内容。 系统级指令回顾: - 所有行内数学表达式必须使用 $...$ 格式。 - 独立公式必须使用 $$...$$ 格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,但在这个上下文中,引用是用户提供的站内引用,我需要参考它们。用户提供了引用[1]和引用[2],但它们是关于JavaScript闭包和框架选择的,不是直接相关。用户说“上述引用仅供参考,并不是用户真正的需求”,所以我应该基于用户的核心需求来回答:JavaScript和Vue 2面试考点精讲。 用户上一次的问题和回答:用户上次的问题是“请问JavaScript和Vue 2面试考点精讲”,所以我需要直接回答这个。 结构化回答: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 - 生成相关问题。 内容要点: - **JavaScript考点精讲**: - 核心概念:闭包、作用域、原型链、异步编程(Promise, async/await)、事件循环(Event Loop)、ES6+特性等。 - 基于引用[1],提到了闭包问题,这是一个经典面试题。 - **Vue 2考点精讲**: - 核心概念:响应式原理(Object.defineProperty)、组件生命周期、状态管理、Vuex、路由(Vue Router)、指令、计算属性、侦听器等。 - 引用[2]提到了VuePress和Gatsby,但这是关于静态站点生成器的,不太相关,我可以忽略或轻微提及Vue生态系统。 精讲内容: 1. **JavaScript部分**: - 解释闭包:使用引用[1]的例子。这里,闭包问题导致输出3,因为var有函数作用域。 - 例如:在createFunctions函数中,由于var i是函数作用域,所有闭包共享同一个i变量,循环结束后i=3,所以所有函数返回3。 - 修复方法:使用let(块级作用域)或创建闭包保存当前值。 - 其他考点:原型继承、Promise链、事件循环(宏任务、微任务)、数组方法(map, filter, reduce)等。 2. **Vue 2部分**: - 响应式原理:Vue 2使用Observer、Dep、Watcher来实现数据绑定。依赖Object.defineProperty。 - 生命周期钩子:如created, mounted, updated等。 - 组件通信:props down, events up;provide/inject;Vuex for state management。 - 计算属性和侦听器:computed vs watch。 - 性能优化:key在v-for中的使用、懒加载等。 生成相关问题: - 在回答末尾,生成3-5个相关问题,基于主题。 确保格式: - 使用Markdown格式。 - 行内数学表达式:例如,在JS中可能没有太多数学,但如果涉及算法,可能需要LaTeX。用户提到“包括变量、不等式、方程等”,但在这个主题下可能不直接相关。我应该只在必要时使用。 - 独立公式:同样,可能不需要。 - 添加引用标识:在引用用户提供的引用时添加。引用[1]是关于JS闭包的,引用[2]是关于框架选择的。我可以自然地引用它们。 最终回答结构: 1. 引言:简要介绍JavaScript和Vue 2的面试重要性。 2. JavaScript考点精讲:分点解释关键概念。 3. Vue 2考点精讲:分点解释关键概念。 4. 相关问题:生成相关问题。 </think> 以下是针对JavaScript和Vue 2面试考点的精讲内容。我将结合核心概念、常见问题和实战示例,分步解析关键知识点,确保内容真实可靠。基于您的需求,参考了站内引用(如引用[1]的闭包面试题)来强化考点讲解。内容基于官方文档和行业实践,适合面试准备。 --- ### JavaScript面试考点精讲 JavaScript是前端面试的核心,考点集中在闭包、作用域、异步编程和原型链等概念。以下是关键点: 1. **闭包和作用域**: - **定义**:闭包是函数与其词法环境的组合,能访问外部作用域的变量。这在异步操作和模块化中广泛应用。 - **经典面试题**(如引用[1]所示): ```javascript function createFunctions() { var result = []; for (var i = 0; i < 3; i++) { result[i] = function() { return i; }; } return result; } var funcs = createFunctions(); console.log(funcs[0]()); // 输出3 console.log(funcs[1]()); // 输出3 console.log(funcs[2]()); // 输出3 ``` - **解析**:`var` 声明的变量无块级作用域,循环结束时 `i=3`,所有闭包共享同一个 `i`。 - **修复方法**:使用 `let`(块级作用域)创建独立闭包: ```javascript for (let i = 0; i < 3; i++) { result[i] = function() { return i; }; } // 此时输出为0, 1, 2 ``` - **考点**:区分 `var` vs `let`/`const`,解释闭包的应用(如防抖函数)。 2. **异步编程**: - **事件循环(Event Loop)**:JavaScript是单线程,依赖宏任务(如 `setTimeout`)和微任务(如 `Promise`)管理异步。 - 示例:`console.log(1); setTimeout(() => console.log(2), 0); Promise.resolve().then(() => console.log(3)); console.log(4);` 输出顺序为1,4,3,2。 - **Promise和async/await**: - `Promise` 处理链式异步:`new Promise().then().catch()`。 - `async/await` 简化异步代码:用 `try/catch` 捕获错误。 - **考点**:手写 `Promise.all` 或解释事件循环机制(如回答输出顺序问题)。 3. **原型链和继承**: - **原型对象**:每个对象有 `__proto__` 属性指向其原型,函数有 `prototype` 属性。 - 示例:`function Person() {}; Person.prototype.say = function() {};`。 - **原型链查找**:访问属性时,沿原型链向上搜索。 - **考点**:解释 `new` 关键字的原理,或实现类继承(ES5用 `Object.create`,ES6用 `class`)。 4. **ES6+特性**: - 箭头函数(无自身 `this`)、解构赋值、模板字符串。 - 模块化:`import/export` vs CommonJS。 - **考点**:比较箭头函数和普通函数的区别。 --- ### Vue 2面试考点精讲 Vue 2面试聚焦于响应式原理、组件设计和状态管理。参考引用[2]中提到的框架选择因素,Vue 2在简单项目中更高效(如首屏速度)。 1. **响应式原理**: - **核心机制**:基于 `Object.defineProperty` 实现数据劫持,通过监听器(Observer)、依赖收集器(Dep)和订阅器(Watcher)更新视图。 - 数学表达式:数据变化触发视图更新的过程可表示为 $ \Delta \text{data} \rightarrow \text{setter} \rightarrow \text{Dep.notify} \rightarrow \text{Watcher.update} $。 - **缺陷**:无法检测数组或对象属性的新增/删除(需用 `Vue.set`)。 - **考点**:描述Vue如何追踪依赖,或解释 `Vue.set` 的作用。 2. **组件生命周期**: - 生命周期钩子:`beforeCreate`、`created`、`mounted`、`updated`、`destroyed`。 - **重点**:`created` 用于初始化数据;`mounted` 用于DOM操作。 - **考点**:在哪个钩子中发起API请求?(推荐 `created` 或 `mounted`)。 3. **组件通信**: - **父子通信**:`props` 向下传递数据,`$emit` 向上触发事件。 - **兄弟/跨级通信**:使用事件总线(Event Bus)或 Vuex 状态管理。 - **考点**:实现一个自定义事件系统或解释 Vuex 的工作流(State → Mutations → Actions)。 4. **计算属性和侦听器**: - **计算属性(computed)**:基于依赖缓存结果,避免重复计算。 - 示例:定义 `fullName() { return this.firstName + ' ' + this.lastName; }`。 - **侦听器(watch)**:监听数据变化执行异步操作。 - **考点**:何时用 `computed` vs `watch`?(计算属性用于同步计算,watch用于异步响应)。 5. **性能优化**: - 使用 `key` 在 `v-for` 中避免DOM复用问题。 - 异步组件:`() => import('./Component.vue')`。 - **考点**:解释Vue 2的虚拟DOM diff算法(如何最小化重渲染)。 --- ### 相关问题 基于上述考点,生成以下面试相关问题供您深入练习: 1. 如何在JavaScript中实现一个深拷贝函数?请考虑循环引用的情况。 2. Vue 2的响应式原理中,为什么数组的某些方法(如push)能被监听?如何手动触发更新? 3. 解释JavaScript的事件循环机制,并举例说明宏任务和微任务的执行顺序。 4. 在Vue 2中,如何优化大型列表的渲染性能? 5. 手写一个Promise.race方法,并说明其应用场景。 如果您需要特定问题的代码示例或更详细解析,请随时告知!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值