面试知识总结一:JS知识

  • 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闭包

所有函数都可以是闭包,当一个函数在调用时,引用的不是自己作用域内的变量,则形成了闭包;闭包是代码块和创建该代码块中上下文数据的结合。

闭包可以实现私有变量。在函数中定义一些变量,然后函数返回一个函数内部的函数,通过返回的函数访问函数中的变量,实现了变量的私有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值