1、什么是闭包以及特性、好处、坏处、使用场景?
闭包就是能够读取其他函数内部变量的函数。
特性:1、函数内部可以嵌套函数
2、内部函数可以直接访问外部函数的参数和变量
3、参数和变量不会被垃圾回收机制回收
使用场景:数据封装和私有化、模块模式
使用闭包就是为了设置私有变量和方法,
好处:能够实现封装和缓存
坏处:就是内存消耗,使用不当可能会造成内存溢出。
2、谈谈js中变量和函数声明的提升?
变量和函数声明的提升会被提升到最顶部去执行
函数的提升高于变量的提升
如果在函数内部用var声明了与外部相同的变量,则不向下寻找
匿名函数不会被提升
不同块中互不影响
3、说说this对象的理解?
this总是指向直接调用者;
如果有new关键字,则指向new出来的那个对象;
在事件中,this指向触发这个事件的对象,特殊的是:在IE中的attachEvent中的this总是指向全局对象window。
4、事件模型的理解?
冒泡型事件:当使用冒泡型事件时,子级元素先触发,父级元素后触发。
捕获型事件:当使用捕获型事件时,父级元素先触发,子级元素后触发。
5、说说栈和堆的区别?
栈内存:存储的都是局部变量,后进先出,栈内存的更新速度很快,因为局部变量的声明周期都很短;
堆内存:存储的都是数组和对象,堆里面的实体不会被释放,但是会被当成垃圾,java有垃圾回收机制不定时地收取;
6、map和forEach的区别?
forEach是最基本的循环,默认有三个参数:array、item、index
map的用法和forEach基本一致,不同的是它会返回一个数组,所以callback需要有return值,如果没有,会返回undefined;
7、JS数组去重?
new Set()、indexOf、利用includes、sort(不推荐)
8、js定义类的四种方法?
工厂方法、构造函数方法、原型方法、组合使用构造函数和原型方法。
9、js实现继承的三种方式?
借用构造函数法、对象冒充、组合继承
10、对原生js的了解程度?
数据类信、运算、对象、Function、继承、闭包、作用域、原型链、Ajax、Dom、Bom、内存泄露、跨域、异步装载、模版引擎、前端MVC、路由、模块化、Canvas、ECMAScript
11、谈一谈你对“函数式编程”的理解?
简单来说,函数式编