一.Vuex
vuex是集中管理项目公共资源的。
vuex有以下几种属性:
1.state:存储公共管理的数据
2.mutation:改变state中数据的方法(注:不要在其中写ajax,不然数据就不可跟踪)
3.getters:改变store的计算属性,getter的返回值会根据它的依赖被缓存起来,只有当它的依赖值发生了改变才会被重新计算。
4.actions:类似于mutation,不同的是在Action提交的是mutation而不是直接变更状态,Action可以包含任意异步操作。
5.model:将store分割成模块。每个模块有自己的state、mutation、action、getter,甚至是嵌套子模块,从上至下进行同样方式的分隔
二. 说一说ES6中箭头函数
箭头函数相当于匿名函数,简化了函数的定义。
写法:1.单条语句 var f=v => v ; 等价于var f = function{ return a; } { f(1) }
2.多条语句 { } return var f = (a,b) => { let result = a + b; return result; } f (6,2)
最大的特点是没有this,this是从外部获取,就是继承外部的执行上下文中的this,由于没有this关键字所以箭头函数不能作为构造函数。
( 1.箭头函数this为父作用域的this,不是调用时的this ; 2.箭头函数不能作为构造函数,不能使用new)
三. 说一说垃圾回收机制
当一个值在内存中失去作用时,垃圾回收机制会根据特殊的算法找到它,并将其回收,释放内存。
垃圾回收机制根据存储方式的不同分为栈垃圾回收和堆垃圾回收。
1.栈回收机制:当一个方法执行结束后,JS会向下移动ESP来销毁该函数保存在栈中的上下文,遵循先进后出。
2.堆回收机制:当方法结束后,栈空间处理完成,但是堆空间中还有相关数据,需要将其回收。
为了更好的清理,V8根据对象的生命周期不一样,把堆分为新生代和老生代。新生代保存生存时间短的对象;老生代保存相对较长的对象。新生代使用Scavenge算法。老生代采用 标记-清除和标记-整理算法。
四.说一说JS变量提升
变量提升是指JS的变量声明和函数声明会在代码编译期,提升到代码的最前面。
变量提升的前提是使用Var关键字进行声明的变量,并且变量提升的时候只有声明被提升,赋值并不会提升
相当于是这样
先给他一个初始值undefined,所以返回的也是undefined,只有var是这样。(变量初始化前访问该变量返回的是undefined)
函数声明提升(在函数声明前可以带哦用该函数)
let 和 const则不行
五.说一说this指向(普通函数、箭头函数)
普通函数中的this
1.谁调用了函数或者方法,那么这个函数或者对象中的this就指向谁
let getThis = function(){
console.log(this)
}
let obj = {
name:""Jack",
getThis:function(){
console.log(this)
}
}
//getThis()方法是由window在全局作用域中调用的,所以this指向调用该方法的对象,即window
getThis()//window
obj.getThis() //obj
2.匿名函数中的this:匿名函数的执行具有全局性,则匿名函数中的this指向是window,而不是调用该匿名函数的对象;
let obj = {
getThis:function(){
return function(){
console.log(this)
}
}
}
obj.getThis()() //window
1.箭头函数中的this
- 箭头函数中的this是在函数定义的时候就确定下来的,而不是在函数调用的时候确定的;
- 箭头函数中的this指向父级作用域的执行上下文;
3.箭头函数无法使用apply、call和bind方法改变this指向,因为其this值在函数定义的时候就被确定下来。
列1:首先,距离箭头函数最近的是getThis(){},与该函数平级的执行上下文是obj中的执行上下文,箭头函数中的this就说下注释处的this,即obj.
列2:该段代码中存在2两个箭头函数,this找不到对应的function(){},所以一直往上照到指向window。