美文网首页
前端面试题(持续补充)

前端面试题(持续补充)

作者: 好奇的猫猫猫 | 来源:发表于2019-03-05 14:15 被阅读0次

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、浏览器相关基础:

相关文章

网友评论

      本文标题:前端面试题(持续补充)

      本文链接:https://www.haomeiwen.com/subject/ouhnuqtx.html