21年前端面试题(吐血整理,持续补充)

js,node.js基础:

闭包

闭包是能够读取其他函数内部变量的函数。在js中,只有函数内部的子函数可以访问内部变量,所以可以把闭包理解为定义在函数内部的函数。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
在Javascript中闭包的创建过程,如以下程序所示。

代码

function a(){

var i=0;

function b(){

alert(++i);

}

return b;

}var c=a();

c();

特点

这段代码有两个特点:

1、函数b嵌套在函数a内部;

2、函数a返回函数b。

这样在执行完var c=a( )后,变量c实际上是指向了函数b,再执行c( )后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,这是因为函数a外的变量c引用了函数a内的函数b。也就是说,当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个闭包。

作用

简而言之,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

在上面的例子中,由于闭包的存在使得函数a返回后,a中的i始终存在,这样每次执行c(),i都是自加1后alert出i的值。

那 么我们来想象另一种情况,如果a返回的不是函数b,情况就完全不同了。因为a执行完后,b没有被返回给a的外界,只是被a所引用,而此时a也只会被b引 用,因此函数a和b互相引用但又不被外界打扰(被外界引用),函数a和b就会被回收。

使用注意点

(1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。

作用域

参考文档

什么是原型链

原型链

变量提升

this指向问题

new 操作符做了什么?

使用new命令时,它后面的函数依次执行下面的步骤。

1.创建一个空对象,作为将要返回的对象实例。
2.将这个空对象的原型,指向构造函数的prototype属性。
3.将这个空对象赋值给函数内部的this关键字。
4.开始执行构造函数内部的代码。

ES5实现继承之一

ES5实现继承之二

堆、栈、队列是什么?都有什么区别?有什么应用?

深复制与浅复制

typedArray问题

es6使用箭头函数需要注意的问题

let 会提升吗?声明、初始化、赋值等概念。

暂时性死区

暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

了解前端模块化吗?有几种规范?

css、html、dom、浏览器相关基础

webpack

Js的内存泄漏场景/监控以及分析

宏任务和微任务

vue中watch不触发、不生效的解决办法及原理

vue中mixins(混入)的使用

vue组件中的通信方式

JS事件之事件流机制

百度美团面试题

var,let,const的区别

typescript中的map数据存储

Map与WeakMap的区别与使用

hash路由和history路由的区别

VUEX-action可以修改state吗

字符串的常见操作

二维数组转一维数组再排序

vuex的存值和取值的操作

路由传参的三种方法

rem与px之间的换算(移动端)

首屏优化加载
一些面试题:

vuex,路由,mvvm,set get,flex,bfc,两个对象合并,两个互不相关的组件如何调用其内的方法,扩展运算符的使用场景,nexttick的原理以及怎么修改表单数据,nextTick和settimeout的区别,route和router的区别,mixin,promise.all及实现方式,px和rem的换算,水平垂直居中,websocket,less常用的写法,es7异步编程及sleep()写法

其他博主的面试分享题(仅供参考)
面试题一
面试题二
20道vue面试题(含答案)

你可能感兴趣的:(21年前端面试题(吐血整理,持续补充))