new算子执行过程1.新建一个对象;2.原型链接:obj._proto_=Con.prototype;3.绑定这个:应用;4.返回一个新的对象(如果构造函数有自己的return时,返回这个值)new操作符的原理:创建一个类的实例:创建一个空对象obj,然后设置空的_proto_对象作为构造函数的原型;实例初始化:传入参数调用构造函数,设置关键字this指向实例obj;返回实例对象。代码复用当你发现代码开始第二次写的时候,你要考虑如何复用:1、函数封装2、继承3、复制extend4。项目的可维护性、可扩展性和协作性。通常,在浏览器中使用ES6的模块化支持,在Node中使用common.js的模块化支持。@1es6:导入/导出;@2common.js:require/module.exports/exports;@3amd:要求/定义;require和import的区别·require支持动态导入,import不支持,正在提议中(bable下可以支持)。·require属于同步导入,import属于异步导入。·require是值的副本,导出值的改变不会影响导入值;import指向内存地址,导入值会随着导出值的变化而变化。babel编译原理1.babylon将ES6/ES7代码编译成AST。2.babel-traverse遍历并翻译AST,得到一个新的AST。3.新的AST通过babel-generator转成ES5。AST:抽象语法树(AbstractSyntaxTree),将代码一个字母一个字母地解析成一个树状的对象。这是语言之间转换、代码语法检查、代码风格检查、代码格式化、代码高亮显示、代码错误提示和代码自动补全等的基础FunctionCurry在一个函数中,首先填入几个参数,然后返回一个新功能技术,称为函数的柯里化。通常,它可以用于为函数预置公共参数,而无需侵入函数进行多次重复调用。constadd=functionadd(x){returnfunction(y){returnx+y}}constadd1=add(1)add1(2)===3add1(21)===22JS语言特性运行在客户端上浏览器;无需预编译,直接解析执行代码;弱类型语言,更灵活;独立于操作系统,跨平台语言;脚本语言、解释语言;webpackwebpack是现代JavaScript应用程序的静态模块打包器(模块打包器)。当webpack处理应用程序时,它会递归地构建一个包含应用程序所需的每个模块的依赖关系图,然后将所有这些模块打包成一个或多个bundle。ant-design的优缺点优点:组件很全,样式效果也不错。缺点:框架定制化程度低,难以修改默认的UI风格。说说对堆和栈的理解js变量存储有堆存储和栈存储。基本数据类型的变量存放在栈中;引用数据类型的变量存储在堆中;引用类型数据的地址也存储在栈中;访问基本类型变量时,直接从栈中取值;访问引用类型变量时,先从栈中读取地址,然后根据地址从堆中取数据。箭头函数和普通函数的区别箭头函数没有this,需要通过查找作用域链来确定this的值。如果箭头函数包含在普通函数中,则this绑定到最近的非箭头函数的this。箭头函数没有自己的参数对象,但可以访问封闭函数的参数对象。它不能通过new关键字调用,也没有new.target值或原型。ES6新特性新增letconst声明变量(局部变量的概念);结构分配;模板字符串、函数默认参数、对象属性的简洁表达;新的数据类型符号、新的数据结构集和映射;引入Promise和generator解决异步回调问题;实现Class和module,通过Calss,可以更好的面向对象编程,使用模块加载,方便模块化编程。(考虑到浏览器兼容性,实际开发中使用babel进行编译);块级作用域,ES5只有全局作用域和函数作用域,块级作用域的好处是不再需要立即执行函数表达式,循环体中的闭包不再是问题;rest参数,用于获取比参数更多的函数,这样就不需要使用arguments对象;promises是一种异步编程的解决方案,比传统的解决方案更高效。事件更加合理和有力;·模块化,模块功能主要由两个命令组成,export和import,export命令用于指定模块的对外接口,import命令用于导入其他模块提供的功能。call和applycall和apply的功能类似,只是参数传递的形式不同:1.改变this的方向;2.借用其他对象的方法;3.调用函数,因为apply和call方法会让函数立即执行。除了js代码中“usestrict”的正常模式外,EcmaScript5还增加了第二种运行模式:“严格模式”。1、剔除js中不合理、不严谨的部分,减少怪异行为;2.剔除代码运行不安全的部分;3.提高编译效率和速度;4.为以后的js新版本做铺垫。整个JOSN:JavaScript对象表示法。JSON中的对象用“{}”标识,一个“{}”代表一个对象,对象的值是键值对(key:value)的形式。JSON是JS的严格子集,是一种轻量级的数据交互格式,类似于xml。数据格式简单,易于读写,占用带宽少。两个函数:·JSON.parse(string):解析JSON字符串,将JSON字符串转为JavaScript值或对象;·JSON.stringify(obj):将一个JavaScript值(对象或数组)转换为JSON字符串;·eval('('+json')'):使用eval方法注意加括号,该方法更容易被攻击。渐进增强和优雅降级渐进增强:针对低版本浏览器构建页面,保证最基本的功能,然后针对高级浏览器改进效果和交互,以达到更好的用户体验。优雅降级:从一开始就构建完整的功能,然后使其兼容低版本的浏览器。Scope·Scope是一个独立的站点,因此变量不会泄露或暴露。·隔离变量,不同作用域的同名变量不会冲突。在ES6之前,只有全局作用域和函数作用域。ES6提供了“块级作用域”,let,const。·作用域是分层的,内部作用域可以访问外部作用域中的变量,反之则不行。
