JavaScript window.onload 事件和 jQuery ready 函数有何不同?
JavaScript window.onload 事件和 jQuery ready 函数之间的主要区别是,前者除了要等待DOM 被创建还要等到包括大型图片、音频、视频在内的所有外部资源都完全加载。
如果加载图片和媒体内容花费了大量时间,用户就会感受到定义在 window.onload 事件上的代码在执行时有明显的延迟。
jquery 中的方法链是什么?使用方法链有什么好处
调用另一个方法,本质上是每个函数末尾加了return this,将调用该函数的jquery对象返回的好处就是简洁明了 写起来也比较方便同时由于只对 DOM 进行了一轮查找,性能方面更加出色
webpack中的Loader和Plugin的区别?
- webpack loader是用来加载文件的,webpack plugin是用来扩展功能的
- loader主要用来加载一个个文件的,比如它可以加载js文件并把js文件转译成低版本浏览器可以支持的js文件;也可以用来加载css文件,可以把css文件变成页面上的style标签;还可以加载图片,可以对文件进行优化
- plugin是用来加强webpack功能的,比如HTML webpack plugin 是用来生成一个html文件的;再比如mini css extract plugin 是用来抽取css代码并把它变成一个css文件的。
Webpack构建流程简单说一下
- 根据配置,识别入口文件;
- 逐层识别模块依赖(包括 Commonjs、AMD、或 ES6 的 import 等,都会被识别和分析);
- Webpack 主要工作内容就是分析代码,转换代码,编译代码,最后输出代码;
- 输出最后打包后的代码。
webpack打包文件太大怎么办?
1.去除不必要的插件
2.提取第三方库
3.代码压缩 webpack 自带了一个压缩插件 UglifyJsPlugin,只需要在配置文件中引入即可。
{
plugins: [
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
]
}
注:
加入了这个插件之后,编译的速度会明显变慢,所以一般只在生产环境启用。
另外,服务器端还可以开启 gzip 压缩,优化的效果更明显。
4.代码分割
可以通过 webpack 的 code split 以及配合 react router 就可以方便实现
code split
是不支持 ES6 的模块系统的,所以在导入和导出的时候千万要注意,特别是导出。如果你导出组件的时候用 ES6 的方式,这时候不管导入是用 CommomJs 还是 AMD,都会失败,而且还不会报错!
5.设置缓存
模块打包原理知道吗?
webpack根据webpack.config.js中的入口文件,在入口文件里识别模块依赖,不管这里的模块依赖是用CommonJS写的,还是ES6 Module规范写的,webpack会自动进行分析,并通过转换、编译代码,打包成最终的文件。最终文件中的模块实现是基于webpack自己实现的webpack_require(es5代码)
,所以打包后的文件可以跑在浏览器上。
使用箭头函数应注意什么?
- 用了箭头函数,this就不是指向window,而是父级(指向是可变的)
- 不能够使用arguments对象
- 不能用作构造函数,这就是说不能够使用new命令,否则会抛出一个错误
- 不可以使用yield命令,因此箭头函数不能用作 Generator 函数
简述 Set、Map的区别?
- Map是键值对,Set是值得集合,当然键和值可以是任何的值;
- Map可以通过get方法获取值,而set不能因为它只有值;
- 都能通过迭代器进行for…of遍历;
- Set的值是唯一的可以做数组去重,Map由于没有格式限制,可以做数据存储;
请写出以下代码的答案,并解释为什么要提升?
console.log(a)
var a = 1
答案:
(1)a 是undefined
因为变量a的声明被提到了作用域顶端。上面代码编译后应该是下面这个样子
var a;
console.log(a)
a = 1
//所以输出内容为 undeifend
所有的声明都会提升到作用域的最顶上去。
(2).
解析和预编译过程中的声明提升可以提高性能,让函数可以在执行时预先为变量分配栈空间
声明提升还可以提高JS代码的容错性,使一些不规范的代码也可以正常执行
简写:
提高性能
容错性更好
var、let、const之间的区别
- var 特点: 可以声明变量 可以重复使用 过于灵活 不严谨 无法控制变量的修改 声明完后可以随便更改
- let 特点: 不能重复声明 可以改 支持块级作用域
- const 特点:不能重写 不能重复定义 支持块级作用于域