- vue框架的基本知识,对于对象引用绑定的处理
vue的双向绑定,data应该是一个函数,返回数据,这个每个数据都是单独的副本,不会相互影响。对于数组值的改变和对象属性的变化,不能直接检测到变化,原因是VUE使用的defineProperty来劫持数据更新,对这类变化无法检测,需要使用Vue.set方法进行更新。
- session,cookie,localstorege,sessionstorege
session服务器端保存用户状态的方法,cookie浏览器端存储数据,每次同源http请求都会带上cookie,存储的数据量比较小;sessionstorege和localstorege都可以在本地存储大量数据的数据,达5M,并且不会主动发送数据到服务器端。cookie只在设定的有效期里有效,sessionstorege只在当前窗口关闭前有效,localstorege在所有同源窗口中都有效。
- new完成了什么事,用代码表达
1.创建新对象
2.将构造函数的作用域赋予新对象
3.执行构造函数,给对象初始化属性和方法
4.返回新对象
var obj={};
obj.__proto__=Base..prototype;
Base.call(obj);
- argument不是数组,是类数组对象,转换为数组:
[].slice.call(argument);
- call,apply,bind
都是Function对象的原生方法,call,apply都是改变一个函数内部this的指向,然后执行该函数,call的第一个参数为this域的对象,后续参数为函数的参数;apply只有两个参数,第一个是对象,第二个是参数数组。bind返回的是改变了上下文的函数而不会立即执行,参数和call相同
var obj2={a:1};
var obj={
a:2,
foo:function(b,c){
console.log(this.a+b+c);
}
}
obj.foo(3,4) //9
obj.foo.call(obj2,3,4) //8
obj.foo.apply(obj2,[3,4]) //8
var f=obj.foo.bind(obj2);
f(3,4);//8
- 两个不同项目A和B,共用同一个模块,怎么实现功能复用?
答:对模块进行封装,整合共用的逻辑代码,JS的话可以将模块发布到本地的npm库中,这样在不同的项目里就可以实现共用。也可以把模块封装成单独组件,实现项目间共用。
- JS事件机制
事件是用户或者浏览器的某种动作,事件处理程序是事件发生时执行的代码片段。
事件冒泡:由内向外传播,最终到document对象。
事件捕获:由外向内的事件逐层捕获。
有DOM事件流程和IE事件流程
- JS闭包
所有函数都可以是闭包,当一个函数在调用时,引用的不是自己作用域内的变量,则形成了闭包;闭包是代码块和创建该代码块中上下文数据的结合。
闭包可以实现私有变量。在函数中定义一些变量,然后函数返回一个函数内部的函数,通过返回的函数访问函数中的变量,实现了变量的私有。