Ryan Shang

生死看淡,不服就干

0%

在面试中遇到了这么两道题,当时没有做出来,挺有意思,记录下来。

一、数组中找出项的组合

1
从一个数组中找出几个项和为M的所有可能。

当时乍一看想到把所有情况枚举一边,但是仔细看不知道怎么下手,回来仔细想了下,确定了个思路,可以把每一个组合转化成二进制,比如[1, 2, 3, 4]中数组第一项和第三项的组合就可以用1010表示,这样就可以快速列出所有组合的情况,然后算出对应项的和,等于M的就返回。

这个思路需要解决这么几个问题:

阅读全文 »

call、apply和bind常用来显示改变函数运行环境中的this指向,这几天突发奇想如果call.call、bind.bind和bind().band()会是怎样的结果,先记录一下,给出一下我现在认为的结论,后面有时间了,深入研究下。

公共

1
2
3
4
5
6
7
8
function fn01 () { console.log('fn01:', this); }
function fn02 () { console.log('fn02:', this); }
let obj = { fn: fn01 }
let fn03 = obj.fn;
fn01(); // fn01 window
fn02(); // fn02 window
fn03(); // fn01 window
obj.fn(); // fn01 obj

这其中定义了两个函数fn01和fn02以及一个对象,每个方法右面注释是执行主体和this指向。上面的几种是比较常见的情况。

call

阅读全文 »

JavaScript中总会出现很多有意思的小地方,这里会把我遇到的问题进行总结,并不定期更新。

1. 函数提升和变量提升的优先级?

函数的执行一般有这么几个步骤:

  1. 开辟一个私有作用域
  2. 形参赋值
  3. 变量提升和函数提升
  4. 代码按顺序执行

其中第三步,函数声明的提升优先级要高于变量提升。

阅读全文 »

1. 打包出现无用html

KA管理员平台登录页面复用KA客户平台登录页面,登录页面需要把部分js通过Webpack打包方式插入到页面中。由于管理员平台采用Vue-Cli3,Vue-Cli3中帮我们处理了需要HtmlWebpackPlugin的地方,在vue.config.js中配置page就会自动编译为HtmlWebpackPlugin的相关配置。但因为登录页面login.html中需要打包进去几个js文件,js文件如果也写在pages配置中,会导致build后多出无用的html文件。

2-1-1-1

如上图,这样打包会导致出现hover3D.html、stage.html和logincss.html几个无用文件。

解决方案是把除了index的部分注释掉,然后把login相关配置写在configureWebpack中。沿用以前的配置,配置写在entry中(不过官方貌似不推荐这么做),然后配置登录页的HtmlWebpackPlugin插件。Vue-Cli3会把configureWebpack中的内容merge到webpack的配置中去。

阅读全文 »

最近某个业务需求,需要在某个时刻更新页面数据,因为有些页面接口比较多,全部采取直接刷新页面的方式。页面刷新有两种方式,window.location.reload()和this.$router.go(0)。但是两种刷新会导致清空store,部分需要store数据支持的功能就会出现问题。为了保证store的数据,使路由变成其他再变回来可能是比较好的方式。

为了不影响其他页面,所以写了个refresh.vue的页面,专门用来刷新页面。需要刷新的时候,跳转到refresh页面。refresh.vue只有一个beforeRouteEnter的方法。

2-2-2-1

2-2-2-2

原本选用的是vue-router的push和go方法搭配,后面发现这样处理浏览器的前进按钮会启用,但是前进后无反应,比较怪异,最后选择用vue-router的replace替代,replace()方法会替换当前路由,不会对浏览器路由造成影响。

阅读全文 »