美文网首页
前端面试4

前端面试4

作者: 卡农me | 来源:发表于2017-09-11 16:40 被阅读22次

1.箭头函数使用需要注意的地方
this、new、arguments

  • this对象的指向是可变的,但在箭头函数中是固定的,指向定义时所在的对象,而非调用时所在的对象
  • 不可以做构造函数,也就是不能使用new,否则抛出一个错误
  • 不可以使用arguments,因为它在函数体内不存在,可以用rest代替
    2.将arguments转换为数组
var arr = Array.prototype.slice.apply(arguments);

可以理解为arguments.slice()(当然arguments里面没有slice方法)

var arr = [...arguments];

3.rest参数
用于获取函数的多余参数,它是一个数组

add(...values){ } //values获取的是add的全部参数
add(arr, ...values){ }//values获取的是剩余的参数

注意:rest参数只能是最后一个参数,否则报错;
rest参数可替代arguments

//arguments变量的写法
const sortNum = () => Array.prototype.slice.call(arguments).sort();
//rest参数的写法
const sortNum = (...numbers) => numbers.sort();

4.扩展运算符...
作用:将数组转换为一个参数序列

//ES5的写法
var arr1 = [0,1,2];
var arr2 = [3,4,5];
Array.prototype.push.apply(arr1,arr2);
console.log(arr1);

打印: [0, 1, 2, 3, 4, 5]

//使用ES6
var arr1 = [0,1,2];
var arr2 = [3,4,5];
arr1.push(...arr2);
//ES5的写法
var arr1 = [0,1,2];
var arr2 = [3,4,5];

console.log(arr1.concat(arr2));

打印: [0, 1, 2, 3, 4, 5]

var arr1 = [0,1,2];
var arr2 = [3,4,5];
[arr1,...arr2];

应用:

  • 解构赋值
const [first, ...rest] = [1,2,3,4,5];
first //1
rest //[2,3,4,5]

*将字符串转换成真正的数组

[...'hello']
//['h','e','l','l','o']

注意:扩展运算符也只能放在最后一位,否则报错
5.当new Foo()时发生了什么

  • 创建了一个新对象
  • 将this指向这个新对象
  • 执行构造函数里面的代码
  • 返回新对象(this)
    6.你做过哪些性能优化
  • 网页内容
    1.减少http请求(通过 合并图片,合并CSS和JS文件)
    2.减少DNS的查询(DNS预解析)
    3.使用CDN
  • CSS
    1.将样式表置顶
    2.少用@import
  • js
    1.使用外部js和css(因为可以被缓存)
    2.减少dom操作
    7..前端路由的原理
    什么是路由?
    简单的说,路由是根据不同的 url 地址展示不同的内容或页面
    原理:在 HTML5 的 history API 出现之前,前端的路由都是通过 hash 来实现的,hash 能兼容低版本的浏览器。
  • HTML5 History
    两个新增的API: history.pushState 和 history.replaceState,两个 API 都会操作浏览器的历史记录,而不会引起页面的刷新。
  • Hash
    就是url 中看到 # ,我们需要一个根据监听哈希变化触发的事件( hashchange) 事件。我们用 window.location 处理哈希的改变时不会重新渲染页面,而是当作新页面加到历史记录中,这样我们跳转页面就可以在 hashchange 事件中注册 ajax 从而改变页面内容。
    8.call,apply和bind的区别
    它们在功能上是没有区别的,都是改变this的指向,它们的区别主要是在于方法的实现形式和参数传递上的不同
    ①:函数.call(对象,arg1,arg2....)
    ②:函数.apply(对象,[arg1,arg2,...])
    ③:var ss=函数.bind(对象,arg1,arg2,....)
    我们通过代码来更加明显的区别一下:
 function show(sex){  
            console.log("普通函数"+sex);  
        }  
        var person={  
            name:"aa",  
            age:14  
        };  
        show.call(person,"男");  
        show.apply(person,["女"]);  
        //对于bind来说,用法更加的灵活  
        var ss=show.bind(person,"不明");  
        ss();  

通过观察上面的代码,很明显的就可以得出它们三者的区别,仅仅是函数传递的不同以及bind方法可以更加的方便的使用

9.闭包的应用
闭包+函数重写

function foo() {  
     var context=1;
     console.log(context);
     context=2;
      foo = function() {
        console.log(context);
     }
}

foo();

第一次打印1,之后都打印2

// 判断element是否匹配选择器selector
function matchSelector(element, selector) {
    var match = 
        document.documentElement.webkitMatchesSelector || 
        document.documentElement.mozMatchesSelector || 
        document.documentElement.msMatchesSelector ||
        // 兼容IE8及以下浏览器
        function(selector, element) {
            // 这是一个好方法,可惜IE8连indexOf都不支持
            // return Array.prototype.indexOf.call(document.querySelectorAll(selector), this) !== -1;

            if (element.tagName === selector.toUpperCase()) return true;

            var elements = document.querySelectorAll(selector),
            length = elements.length;

            while (length--) {
            if (elements[length] === this) return true;
            }

            return false;
        };

    // 重写函数自身,使用闭包keep住match函数,不用每次都判断兼容
    matchSelector = function(element, selector) {
        return match.call(element, selector);
    };

    return matchSelector(element, selector);
}

相关文章

  • 前端面试的经典题

    前端面试的经典题 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 Javascript...

  • 值得看的前端面试文章- 收藏集 - 掘金

    【前端面试 -- 四月二十家前端面试题分享】1-5 套个人解题答案 - 前端 - 掘金前端面试题 前端面试--四月...

  • 前端面试概念收集器

    前端面试概念收集器 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 本文分为 概念,原...

  • 前端面试的难题和怪题

    前端面试的难题和怪题 前端面试三部曲 前端面试概念收集器 前端面试的经典题 前端面试的难题和怪题 函数 答案 Er...

  • 前端面试4

    1.箭头函数使用需要注意的地方this、new、arguments this对象的指向是可变的,但在箭头函数中是固...

  • PHPer 面试指南-扩展阅读资源整理

    前端篇 收集的前端面试题和答案 前端开发面试题 史上最全的web前端面试题汇总及答案 前端工程师手册 HTTP协议...

  • PHPer 面试指南-扩展阅读资源整理

    前端篇 收集的前端面试题和答案 前端开发面试题 史上最全的web前端面试题汇总及答案 前端工程师手册 HTTP协议...

  • web前端面试4

    1 ES6中的map和原生的对象有什么区别 JavaScript 的对象(Object),本质上是键值对的集合(H...

  • 前端面试

    前端面试

  • Vue面试题总结

    前端面试题总结[https://www.jianshu.com/p/4e69d9769966]JavaScript...

网友评论

      本文标题:前端面试4

      本文链接:https://www.haomeiwen.com/subject/uuefsxtx.html