- 01 解释下JavaScript中this是如何工作的。
- 02 异步线程,轮询机制,宏任务微任务
- 03 说一说盒子模型
- 04 async await 和promise和generator有什么区别
- 05 css横向居中纵向居中
- 06 vue项目webpack配置:
- 07 vue webpack打包优化:
- 08 vue新特性
- 09 vue-router实现路由懒加载(动态加载路由)
- 10 vue页面第一次渲染执行的几个钩子函数
- 11 计算属性
- 12 vue为什么有时候修改了值,可以打印修改的值,但是页面上不会改变
- 13 如何给vue自定义组件添加点击事件?
- 14 钩子函数(小程序)
- 15 flex 的水平居中和垂直居中
- 16 this指向 ,箭头函数的this指向
01 解释下JavaScript中this是如何工作的。
- this永远指向函数运行时所在的对象,而不是函数被创建时所在的对象。匿名函数或不处于任何对象中的函数指向window 。
- 如果是call,apply,with,指定的this是谁,就是谁。
- 普通的函数调用,函数被谁调用,this就是谁。
02 异步线程,轮询机制,宏任务微任务
https://blog.csdn.net/u013362969/article/details/89714436
https://www.cnblogs.com/ckAng/p/11133643.html
https://zhuanlan.zhihu.com/p/33058983[
](https://www.jb51.net/css/56268.html)
03 说一说盒子模型
布局的时候使用的,div ,div的 margin padding border
普通盒模型、怪异盒模型的区别
ie 和其他浏览器对盒模型的 margin 和 padding的解析有区别
https://www.imooc.com/article/68238
04 async await 和promise和generator有什么区别
1. 这几种都可以解决异步操作的地狱回调问题2. async await 和promise对象的区别:3. async和promise都是异步方法,区别是async生成的结果是promise对象,async是promise的终结版。4. await只能在async中使用,await是阻塞的意思,就是暂停,你一起调用2个接口,第一个执行完,不输出结果,要等最第二个接口执行完,才返回这两个的结果。是属于将异步操作转化为同步操作的做法5. async await和generator:async是Generator的语法糖 ,也就是说,async是对generator的实现,而generator代码更复杂。6. generator 除了能解决回调地域问题,还可以作为迭代器使用。generator 语法一般用于redux-saga7. redux-saga 一般在umi或dva框架中使用
05 css横向居中纵向居中
https://www.cnblogs.com/xiaoxueer/p/11849997.html
https://blog.csdn.net/weixin_37580235/article/details/82317240
06 vue项目webpack配置:
http://www.manongjc.com/article/54132.html
publicPath: './', //基本路径outputDir: 'dist', //输出文件目录assetsDir:"static",//放置静态资源的目录indexPath:"index.html"//html的输出路径开发生产共同配置resolve: {alias: {'@': path.resolve(__dirname, './src'),'@c': path.resolve(__dirname, './src/components'),'@p': path.resolve(__dirname, './src/pages')} 别名配置css配置css: {extract: true, // 是否使用css分离插件 ExtractTextPluginsourceMap: false, // 开启 CSS source maps?loaderOptions: {css: {}, // 这里的选项会传递给 css-loaderpostcss: {} // 这里的选项会传递给 postcss-loader}, // css预设器配置项 详见https://cli.vuejs.org/zh/config/#css-loaderoptionsmodules: false // 启用 CSS modules for all css / pre-processor files.},proxy 跨域的配置devServer: {open: process.platform === 'darwin',host: '0.0.0.0', // 允许外部ip访问port: 8022, // 端口https: false, // 启用httpsoverlay: {warnings: true,errors: true}, // 错误、警告在页面弹出proxy: {'/api': {target: 'http://www.baidu.com/api',changeOrigin: true, // 允许websockets跨域// ws: true,pathRewrite: {'^/api': ''}}} // 代理转发配置,用于调试环境},
https://www.cnblogs.com/jing-tian/p/11266796.html
07 vue webpack打包优化:
1.babel-plugin-component ,减少js包的大小,将插件(如element-ui)和自己写的js分开打包,按需加载
2. 路由懒加载:使用import(/webpackChunkName:”group-foo”/‘./Foo.vue’)
可以完成按需加载页面,避免首页加载内容过多而导致的白屏问题
3.使用 UglifyPlugin (webpack.optimize.UglifyJsPlugin)对代码进行压缩
4.使用该插件image-webpack-loader 进行图片压缩
1: 引入:require("image-webpack-loader")2:配置:module: {rules: [...(config.dev.useEslint ? [createLintingRule()] : []),{test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,loader: 'url-loader',options: {loader: 'image-webpack-loader',options: {bypassOnDebug: true,}}},
5.由于webpack打包后的js过大,以至于在加载资源时间过长。所以将文件打包成多个js文件,在需要的时候按需加载
new commonsChunkPlugin({name:'charts',chunks:['commons']minChunks:function(module){return (module.resource &&/\.js$/.test(module.resource) &&module.resource.indexOf(path.join(__dirname, '../node_modules')) === 0 && ['jquery.js', 'highcharts.js','echarts'].indexOf( module.resource.substr(module.resource.lastIndexOf('/')+1).toLowerCase() ) != -1)}})}
08 vue新特性
https://www.cnblogs.com/bob-zb/p/12481014.html
09 vue-router实现路由懒加载(动态加载路由)
https://blog.csdn.net/xm1037782843/article/details/88225104
答:三种方式
第一种:vue异步组件技术 ==== 异步加载,vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件。
第二种:路由懒加载(使用import)。
第三种:webpack提供的require.ensure(),vue-router配置路由,使用webpack的require.ensure技术,也可以实现按需加载。这种情况下,多个路由指定相同的chunkName,会合并打包成一个js文件。
10 vue页面第一次渲染执行的几个钩子函数
beforeCreate created beforeMounte mounted
##13. vue页面跳转时执行那几个钩子,
beforeCreate created beforeMounte mounted beforeDestory destoryed
##14. v-if v-for 在哪个钩子函数中解析
当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级
避免 v-if 和 v-for 用在一起必要
永远不要把 v-if 和 v-for 同时用在同一个元素上
##15. vue前端路由原理 路由模式
history hash html5 历史记录
11 计算属性
计算属性 watch ,计算属性就是当其依赖属性的值发生变化时,这个属性的值会自动更新,与之相关的DOM部分也会同步自动更新。
计算属性有缓存,计算属性的函数会自动调用。普通函数需要手动触发
计算属性和watch ,异步操作或大数据量操作使用watch
1.watch擅长处理的场景:一个数据影响多个数据
2.computed擅长处理的场景:一个数据受多个数据影响
https://www.jianshu.com/p/a69a9bac9dc3
12 vue为什么有时候修改了值,可以打印修改的值,但是页面上不会改变
- 由于 JavaScript 的限制,Vue 不能检测数组和对象的变化。尽管如此我们还是有一些办法来回避这些限制并保证它们的响应性。
- 对于对象:
Vue 无法检测 property 的添加或移除
Vue 不能检测以下数组的变动:
当你利用索引直接设置一个数组项时,例如:vm.items[indexOfItem] = newValue
当你修改数组的长度时,例如:vm.items.length = newLength
当页面上的值不发生变化时,可以使用 $.set
对象还可以使用 :assign
数组还可以使用:splice
13 如何给vue自定义组件添加点击事件?
需要在@click后面加上.native,官方对于native的解释为:
.native -——监听组件根元素的原生事件
14 钩子函数(小程序)
--7.1 App 注册小程序。接受一个 Object 参数,其指定小程序的生命周期回调等。钩子函数有:属性 类型 默认值 必填 说明 最低版本onLaunch function 否 生命周期回调——监听小程序初始化。onShow function 否 生命周期回调——监听小程序启动或切前台。onHide function 否 生命周期回调——监听小程序切后台。onError function 否 错误监听函数。onPageNotFound function 否 页面不存在监听函数。 1.9.90onUnhandledRejection--getApp 获取小程序的实例--var myApp = getApp();--myApp.globalData.全局变量名 可以获取在app.js中定义的全局变量的值--全局变量可以跨页面传参--7.2 Page(Object object)注册小程序中的一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等。页面的钩子函数:**onLoad function 生命周期回调—监听页面加载 只执行一次的**onShow function 生命周期回调—监听页面显示 执行多次**onReady function 生命周期回调—监听页面初次渲染完成 只执行一次的**onHide function 生命周期回调—监听页面隐藏 执行多次**onUnload function 生命周期回调—监听页面卸载 只执行一次的**onPullDownRefresh function 监听用户下拉动作**onReachBottom function 页面上拉触底事件的处理函数**onShareAppMessage function 用户点击右上角转发onPageScroll function 页面滚动触发事件的处理函数onResize function 页面尺寸改变时触发,详见 响应显示区域变化onTabItemTap function 当前是 tab 页时,点击 tab 时触发## 7.深浅拷贝: ****
1、区别: 浅拷贝/深度拷贝
判断: 拷贝是否产生了新的数据还是拷贝的是数据的引用
知识点:对象数据存放的是对象在栈内存的引用,直接复制的是对象的引用
2、常用的拷贝技术
for循环完成深拷贝
二、深拷贝
1、js数组的slice方法
var arr1 = [“前端”,”安卓”,”苹果”];
var arr2 = arr1.slice(0);
arr2[0] = “后端”;
console.log(“原始值:” + arr1 );//前端,安卓,苹果
console.log(“新值:” + arr2);//后端,安卓,苹果
理解:通过JS的slice方法,改变拷贝出来的数组的某项值后,对原来数组没有任何影响。
缺点:适用于对不包含引用对象的一维数组的深拷贝
2、js数组的concat方法
var arr1 = [“前端”,”安卓”,”苹果”];
var arr2 = arr1.concat();
arr2[0] = “后端”;
console.log(“原始值:” + arr1 );//前端,安卓,苹果
console.log(“新值:” + arr2);//后端,安卓,苹果
理解:concat方法,原数组和新数组修改某值后,不会改变。
缺点:适用于对不包含引用对象的一维数组的深拷贝
1). arr.concat(): 数组深拷贝
2). arr.slice(): 数组深拷贝
3).Object.assign()对象深拷贝
4). JSON.parse(JSON.stringify(arr/obj)): 数组或对象深拷贝, 但不能处理函数数据
5). 浅拷贝包含函数数据的对象/数组
6). 深拷贝包含函数数据的对象/数组
对于多层对象和数组:可以使用 递归调用、JSON.parse(JSON.stringify(arr/obj))、jquery的extend方法来实现深拷贝
https://blog.csdn.net/xuexizhe88/article/details/80990529
https://www.cnblogs.com/echolun/p/7889848.html
15 flex 的水平居中和垂直居中
水平:justify-content:center; 垂直:align-content:center;
flex:1 的值是1 1 0%,【父控件有剩余空间占1份放大,父控件空间不足按1缩小,自身的空间大小是0%】 *
flex属性 是 flex-grow、flex-shrink、flex-basis三个属性的缩写。
推荐使用此简写属性,而不是单独写这三个属性。
flex-grow:定义项目的的放大比例;
默认为0,即 即使存在剩余空间,也不会放大;
所有项目的flex-grow为1:等分剩余空间(自动放大占位);
flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。
flex-shrink:定义项目的缩小比例;
默认为1,即 如果空间不足,该项目将缩小;
所有项目的flex-shrink为1:当空间不足时,缩小的比例相同;
flex-shrink为0:空间不足时,该项目不会缩小;
flex-shrink为n的项目,空间不足时缩小的比例是flex-shrink为1的n倍。
flex-basis: 定义在分配多余空间之前,项目占据的主轴空间(main size),浏览器根据此属性计算主轴是否有多余空间,
默认值为auto,即 项目原本大小;
设置后项目将占据固定空间。
所以flex属性的默认值为:0 1 auto (不放大会缩小)
flex为none:0 0 auto (不放大也不缩小)
flex为auto:1 1 auto (放大且缩小)
16 this指向 ,箭头函数的this指向
this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
