面试题汇总

static目录和src下的assets的区别?

assets下的文件会被loader()转译后存放在dist-static-img文件下,static下的文件会直接拷贝到dist-static下。
建议大的文件放到static下

vuex刷新后数据丢失问题。

在app.vue里面created生命周期函数内绑定一个beforeunload事件,在页面刷新前将vuex当前状态存在locastorage中,页面重新加载时在created生命周期函数内判断locastorage中如果有值,将当前值通过this.$store.replaceState(state: Object)存入state里。

export default {
  name: 'App',
  created () {
    //在页面加载时读取sessionStorage里的状态信息
    if (sessionStorage.getItem("store") ) {
        this.$store.replaceState(Object.assign({}, this.$store.state,JSON.parse(sessionStorage.getItem("store"))))
    } 

    //在页面刷新时将vuex里的信息保存到sessionStorage里
    window.addEventListener("beforeunload",()=>{
        sessionStorage.setItem("store",JSON.stringify(this.$store.state))
    })
  }
}

computed和watch属性的区别?

computed的依赖属性其中之一发生了变化,当前computed属性都会更新。watch中能监听某一个属性,当属性变化时触发回调。
假如c = a(1) + b(2),使用comuted属性时,当a或者b改变都会触发c,但是如果a=>2,b=>1,此时是不会触发c的watch回调。

解释一下Array响应式实现?

当我们初始化data属性是一个数组时,会将Array.prototype.push,pop,保存起来,同时重新给当前数组声明push,pop函数,这样它就不会调用原型链上的方法,这样就可以在自定义的函数将数据处理为可响应式的。

说明一下vue的响应式原理实现?

当我们初始化date时,会使用Object.defineProperty定义对象属性set,get描述符,在生成vnode时会获取对象的值,此时会调用属性的get方法,同时会收集依赖,当属性值改变时调用set方法,通知依赖进行更新。更新过程其实就是对比新的vnode和旧的vnode,基本上key和tag相同,说明是同一个节点,可能就是更新dom的textcontent,如果不相同则生成新的dom节点,删除旧的dom节点。

如果理解发布订阅模式?

定义了对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。

那些会隐式转换为false

undefined,null,"",0,false,NaN,其它的都隐式转换为true。

  • console.log(i++);
    也是需要先输出i,再进行++自增运算。
  • . 和 new ,new xx() 运算符优先级
function Foo() {
    getName = function () { alert (1); };
    return this;
}
Foo.getName = function () { alert (2);};
Foo.prototype.getName = function () { alert (3);};
var getName = function () { alert (4);};
function getName() { alert (5);}
 
//请写出以下输出结果:
Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

new Foo() >> . >> () 函数调用 >> new

为什么使用前端框架

  • 组件化使工程易于维护、易于组合扩展
  • UI与状态的同步,提高了开发效率

你可能感兴趣的:(面试题汇总)