前端面试题细节问题

1. 使不使用var定义变量的区别:

js中定义一个变量可以加关键词var也可以不加,规则如下:

1.在全局范围内用不用var都可以,变量是全局的;

2.在局部范围内,比如函数中,用不用var是不一样的,不用var定义出的是全局变量。

3.使用var声明的一个变量,无法通过delete运算符删除;

4.如果没有使用严格模式给一个未声明的变量赋值,JavaScript会自动创建一个全局变量,以这种方式创建的变量可以删除。

但是这个规则在有个上下文里不起作用,就是eval上下文,变量没有{DontDelete}特性。参考

同时要注意的一点是,js在执行之前会进行语法分析,也就是用var和function定义的变量和函数,程序会进行预处理(会进行变量声明提升),例子如下:

 1     <script>
 2         var i = 0;
 3         alert(i); //0
 4 
 5         function test() {
 6             alert(i); //undefined
 7             var i = 1;
 8             alert(i); //1
 9         }
10         test();
11     </script>

2. 什么是闭包以及闭包用来解决什么问题:

1. 什么是闭包:创建闭包最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用域链,将函数内部的变量和方法传递到外部。

2. 闭包的作用:

  1. 使用闭包可以访问函数中的变量;
  2. 可以使变量长期保存在内存中,生命周期比较长。

3. 使用闭包注意事项:闭包不能滥用,否则会导致内存泄露,影响网页的性能,闭包使用完了之后,要立即释放资源,将引用变量指向null。

4. 闭包用来解决什么问题:

闭包及问题的解决

3. JS概率算法:

美团2016校园招聘 研发工程师( 一)
假设一段公路上, 1 小时内有汽车经过的概率为96 % ,那么, 30 分钟内有汽车经过的概率为 ?
A 48 %
B 52 %
C 80 %
D 96 %
答案:C
分析:1小时内有车通过的概率是0.96,那么1小时内没有车通过的概率是0.04,可以把单位分解为30分钟,1个小时里没有通过车的概率可以转换成连续两个30分钟里没有通过车的概率,即x 2=0.04,x=0.2,那么半小时内出现车的概率就是0.8.
4. 单向数据流:
单向数据流指只能从一个方向修改状态,与单向数据流对应的是双向数据流(也叫双向绑定)。
双向绑定:Model中可以修改自己或其它Model的状态,用户的操作(比如在输入框中输入内容)也会修改状态,这使得改变一个状态有可能会触发一连串的状态的变化,导致很难预测最终的状态是什么,使得代码变得很难调试。
单向数据流:当你修改一个状态时,需要完全重新开始走一个修改的流程,这限制了状态修改的方式,让状态变得可预测,容易调试。
单向数据流的使用场景:多个组件会共享状态时,共享状态和组件间(兄弟组件)通信变得不容易,把共享状态抽取出来,用单向数据流的方式会变得容易。
在vue中单向数据流的理解:
v-model在使用时很像双向绑定,但是Vue是单向数据流,v-model只是语法糖而已。双向数据绑定就是在单项绑定的基础上给可输入元素添加了change(input)事件,来动态修改model和view,即通过触发$emit()父组件的事件来修改mv达到mvvm的效果。双向绑定是在同一个组件内,将数据和视图绑定在一起,和父子组件之间的通信并无关联。
vue的依赖追踪是通过 Object.defineProperty 把data对象的属性全部转为 getter/setter来实现的;当改变数据的某个属性值时,会触发set函数,获取该属性值的时候会触发get函数,通过这个特性来实现改变数据时改变视图;也就是说只有当数据改变时才会触发视图的改变,反过来在操作视图时,只能通过DOM事件来改变数据,再由此来改变视图,以此来实现双向绑定。
而vue组件间传递数据是单向的,即数据总是由父组件传递到子组件,子组件在其内部可以有自己维护的数据,但无权修改父组件传递给它的数据,当开发者尝试这样做的时候,vue会报错,这样做是为了组件间更好的解耦,在开发中可能会有多个子组件依赖于父组件的某个数据,假如子组件可以修改父组件数据的话,一个子组件变化就会引发所有依赖这个数据的子组件发生变化,所以vue不推荐子组件修改父组件的数据,直接修改props会抛出警告。
5. svg和canvas区别
canvas:H5中新元素<canvas>,绘制图形通过js实现,画布,标量图,引入jpg,png照片,做大型网络游戏,统计图表。
svg:XML技术,矢量图,动态小图标,用于地图等,支持事件绑定,绘制图形通过标签实现。
svg的js库:two.js:绘制二维图形,支持三种格式:svg(默认),canvas,WEBGL;
        three.js:绘制三维图形。

猜你喜欢

转载自www.cnblogs.com/knuzy/p/9315974.html