设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 文件
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

中高级前端大厂面试秘籍,为你保驾护航金三银四,直通大厂(6)

发布时间:2019-02-20 20:16 所属栏目:21 来源:佚名
导读:声明 let / const : 块级作用域、不存在变量提升、暂时性死区、不允许重复声明 const : 声明常量,无法修改 解构赋值 class / extend : 类声明与继承 Set / Map : 新的数据结构 异步解决方案: Promise 的使用与实现

声明

  • let / const: 块级作用域、不存在变量提升、暂时性死区、不允许重复声明
  • const: 声明常量,无法修改
  • 解构赋值
  • class / extend: 类声明与继承
  • Set / Map: 新的数据结构
  • 异步解决方案:

    • Promise的使用与实现
    • generator:

      1. - `yield`: 暂停代码  
      2. - `next()`: 继续执行代码  
    1. function* helloWorld() { 
    2.   yield 'hello'; 
    3.   yield 'world'; 
    4.   return 'ending'; 
    5.  
    6. const generator = helloWorld(); 
    7.  
    8. generator.next()  // { value: 'hello', done: false } 
    9.  
    10. generator.next()  // { value: 'world', done: false } 
    11.  
    12. generator.next()  // { value: 'ending', done: true } 
    13.  
    14. generator.next()  // { value: undefined, done: true }  
    1. - `await / async`: 是`generator`的语法糖, babel中是基于`promise`实现。 
    2.  
    3. ```js 
    4. async function getUserByAsync(){ 
    5.    let user = await fetchUser(); 
    6.    return user; 
    7.  
    8. const user = await getUserByAsync() 
    9. console.log(user) 
    10. ```  

    18. AST

    抽象语法树 (Abstract Syntax Tree),是将代码逐字母解析成 树状对象 的形式。这是语言之间的转换、代码语法检查,代码风格检查,代码格式化,代码高亮,代码错误提示,代码自动补全等等的基础。例如:

    1. function square(n){ 
    2.     return n * n 

    通过解析转化成的AST如下图:

    19. babel编译原理

    • babylon 将 ES6/ES7 代码解析成 AST
    • babel-traverse 对 AST 进行遍历转译,得到新的 AST
    • 新 AST 通过 babel-generator 转换成 ES5

    20. 函数柯里化

    在一个函数中,首先填充几个参数,然后再返回一个新的函数的技术,称为函数的柯里化。通常可用于在不侵入函数的前提下,为函数 预置通用参数,供多次重复调用。

    1. const add = function add(x) { 
    2.     return function (y) { 
    3.         return x + y 
    4.     } 
    5.  
    6. const add1 = add(1) 
    7.  
    8. add1(2) === 3 
    9. add1(20) === 21 

    21. 数组(array)

    • map: 遍历数组,返回回调返回值组成的新数组
    • forEach: 无法break,可以用try/catchthrow new Error来停止
    • filter: 过滤
    • some: 有一项返回true,则整体为true
    • every: 有一项返回false,则整体为false
    • join: 通过指定连接符生成字符串
    • push / pop: 末尾推入和弹出,改变原数组, 返回推入/弹出项
    • unshift / shift: 头部推入和弹出,改变原数组,返回操作项
    • sort(fn) / reverse: 排序与反转,改变原数组
    • concat: 连接数组,不影响原数组, 浅拷贝
    • slice(start, end): 返回截断后的新数组,不改变原数组
    • splice(start, number, value...): 返回删除元素组成的数组,value 为插入项,改变原数组
    • indexOf / lastIndexOf(value, fromIndex): 查找数组项,返回对应的下标
    • reduce / reduceRight(fn(prev, cur), defaultPrev): 两两执行,prev 为上次化简函数的return值,cur 为当前值(从第二项开始)
    • 数组乱序:
    1. var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
    2. arr.sort(function () { 
    3.     return Math.random() - 0.5; 
    4. }); 
    • 数组拆解: flat: [1,[2,3]] --> [1, 2, 3]
    1. arr.prototype.flat = function() { 
    2.     this.toString().split(',').map(item => +item ) 

    浏览器

    1. 跨标签页通讯

    不同标签页间的通讯,本质原理就是去运用一些可以 共享的中间介质,因此比较常用的有以下方法:

    • (编辑:ASP站长网)

    网友评论
    推荐文章
      热点阅读