面试遇到的问题总结一下

239 阅读2分钟

js冒泡

  • 理解

    DOM树中子节点包含在父节点中,点击子节点相当于同时点击了子节点与父节点,与父节点的父节点,最终的根节点就是document和windows。

    事件从触发点开始,逐层向上传递的过程就是冒泡

  • 阻止冒泡

    • 阻止默认行为
    if(event.stopPropagation){
        event.stopPropagation();
    }else{
        event.cancelBubble = true;
    };
    
    • 或者,不阻止冒泡过程,修改执行的函数方法:
    event.target == event.currentTarget
    

    判断一下点击的是否是当前节点。

    这个方法的缺点是:需要处理的节点多的时候重复代码多,效率低。

    • jq的return false

    javascript的return false只会阻止默认行为,而使用jQuery的话则既阻止默认行为又防止对象冒泡。

    原生js,只会阻止默认行为,不会停止冒泡

前端的性能优化

参考一下:

前端性能优化方案?

页面适配有那些方法

flex布局   百分比    rem

ie兼容问题

  • ie7 overflow:hidden;失效

    是因为子元素有定位,解决办法是给父元素加定位样式;

  • ie下input点击有边框

    • 设置按钮为none,然后在按钮外面套一层来实现边框的效果

    • 或者input { filter:chroma(color=#000000); }

      注:因为ietest中没有滤镜功能,所以不能在这个软件里测试效果

  • IE6 IE7 IE8(Q) 不支持JSON.parse()

    JSON.parse() 方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。提供可选的reviver函数用以在返回之前对所得到的对象执行变换(操作)。

    问题:使用了 JSON 对象的脚本代码在 IE6 IE7 IE8(Q) 中运行的时候可能会抛出异常,导致功能失效。

    解决:使用eval和new Function方式代替json.parse

    //使用两种简单的方式解析 JSON 格式字符串

    json1 = eval("(" + jsonStr + ")")

    json2 = (new Function("return " + jsonStr))();

  • CSS hack

js异步的方法

参考一下: js异步方案

es6

  • 箭头函数的最大的好处是什么

    箭头函数内部的this是词法作用域,由上下文确定;

    箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者obj:

    原来:

    var obj = {
        birth: 1990,
        getAge: function () {
            var b = this.birth; // 1990
            var fn = function () {
                return new Date().getFullYear() - this.birth; // this指向window或undefined
            };
            return fn();
        }
    };
    

    箭头函数:

    var obj = {
        birth: 1990,
        getAge: function () {
            var b = this.birth; // 1990
            var fn = () => new Date().getFullYear() - this.birth; // this指向obj对象
            return fn();
        }
    };
    obj.getAge(); // 25
    

再面再总结。。。