问题:你对flex的理解?
解析:web应有不同设备尺和分辨率,这时需要响应式界设计来满复杂的布局需求,Flex弹性盒模型的优势在于开发员只是声明布局应该具有的为,不需要给出具体的实现式,浏览器负责完成实际布局,当布局涉及到不定宽度,分布对的场景时,就要优先考虑弹性盒布局
问题:解释下变量提升?
解析:JavaScript引擎的作式是,先解析代码,获取所有被声明的变量,然后再地运。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。
console.log(a)//undefined
vara=1
functionb()
{console.log(a
)
}
b()//1
上的代码实际执顺序是这样的:
第步:引擎将vara=1拆解为vara=undefined和a=1,并将vara=undefined放到最顶端,a=1还在原来的位置
这样来代码就是这样:
vara=undefined
console.log(a)//undefined
a=1
functionb()
{console.log(a
)
}
b()//1
第步就是执,因此js引擎从上往下执就造成了当前的结果,这就叫变量提升。
问题:闭包是什么?
解析:MDN的解释:闭包是函数和声明该函数的词法环境的组合。
按照我的理解就是:闭包=『函数』和『函数体内可访问的变量总和』
举个简单的例:
(function(){
vara=1;
functionadd(){
varb=2
varsum=b+a
console.log(sum);//3
}
add()
})()
add函数本身,以及其内部可访问的变量,即a=1,这两个组合在起就被称为闭包,仅此已。
问题:闭包的作有哪些?
解析:闭包最的作就是隐藏变量,闭包的特性就是内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后
基于此特性,JavaScript可以实现私有变量、特权变量、储存变量等
我们就以私有变量举例,私有变量的实现法很多,有靠约定的(变量名前加_),有靠Proxy代理的,也有靠Symbol这种新数据类型的。
但是真正泛流的其实是使闭包。
function
Person(){var
name=cxk;
this.getName=
function(){returnname;
}
this.setName=
function(value){name=
value;
}
}
constcxk=newPerson()
console.log(cxk.getName())//cxk
cxk.setName(jntm)
console.log(cxk.getName())//jntm
函数体内的varname=cxk只有getName和setName两个函数可以访问,外部法访问,相对于将变量私有化。
本文收录了一些在Web前端开发面试中经常会遇到的面试题及答案,希望对大家有所帮助,若有所疏漏欢迎指正。