zoukankan      html  css  js  c++  java
  • 前端面试题细节问题

    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分钟里没有通过车的概率,即x2=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:绘制三维图形。
    你必须穷尽一生磨练技能,这就是成功的秘诀,也是让人家敬重的关键。
  • 相关阅读:
    Java 如何删除 List 中的重复元素
    显示源代码及其子目录中的文件结构
    关于overflow:hidden的作用(溢出隐藏,清除浮动,解决外边塌陷等等)
    网页制作小技巧
    StringWriter/PrintWriter在Java输出异常信息中的作用
    [转载]利用@media screen实现网页布局的自适应,@media screen and
    OutputCache祥解
    string和stringBuilder区别
    sql执行顺序
    sql事务(Transaction)用法介绍及回滚实例
  • 原文地址:https://www.cnblogs.com/knuzy/p/9315974.html
Copyright © 2011-2022 走看看