美文网首页
前端面试2021-003

前端面试2021-003

作者: 大牧莫邪 | 来源:发表于2021-10-14 09:54 被阅读0次

    一、多选题

    1、关于剩余参数的使用,正确的是?AB

    A、function fn(name, ...args) {...}
    B、function fn(...args) {...}
    C、function fn(...args, name) {...}
    D、function fn(...name, ...args) {...}

    答案:AB
    C问题:剩余参数只能出现在参数列表的最后一个位置
    D问题:函数的参数中,剩余参数只能有一个

    2、声明类型的语法,正确的是?BC

    A、class Person() {}
    B、class Person {}
    C、function Person () {}
    D、function Person {}

    答案:BC
    A问题,class语法中没有类型名称后面的括号
    D问题,function语法中,类型名称后面包含一个括号,使用函数模拟的类型

    3、关于ES6中constructor()的描述,正确的是?ABD

    A、类型中的构造函数,用来在创建对象的同时初始化对象属性
    B、创建指定类型的对象时,会自动调用执行
    C、类型中的构造函数,需要手工调用执行
    D、类型中的普通函数,需要手工调用执行

    答案:ABD
    C问题:构造函数是创建对象的时候自动执行,不需要手工调用

    4、箭头函数的使用,操作语法正确的是?BD

    A、let fn = ()-> console.log("hello")
    B、let fn = ()=> console.log("hello")
    C、let fn = name -> console.log("params")
    D、let fn = name => console.log("params")

    答案:BD
    AC问题:箭头函数中使用错误了箭头符号

    5、箭头函数中的参数的使用,正确的是? BD

    A、let func = name, age => console.log(名称:${name}, 年龄:${age})
    B、let func = (name, age) => console.log(名称:${name}, 年龄:${age})
    C、let func = name, age => {console.log(名称:${name}, 年龄:${age})}
    D、let func = (name, age) => {console.log(名称:${name}, 年龄:${age})}

    答案:BD
    AC问题:多个参数出现时,不能省略括号

    6、箭头函数中返回值的操作,正确的是?AD

    A、let fc = (x, y) => {x++; y++; return x + y;}
    B、let fc = (x, y) => {x++; y++; x + y;}
    C、let fc = (x, y) => return x + y
    D、let fc = (x, y) => x + y

    答案:AD
    B问题:函数代码部分,带有花括号的情况下需要通过return才能返回数据
    C问题:函数代码部分,省略花括号的情况下不需要添加return关键词可以直接返回数据

    7、关于类和对象的描述,正确的是?ABD

    A、类表示类型的意思
    B、对象是包含数据的、实际存在的物体
    C、一个类型只能创建一个对象
    D、多个对象可以属于一个类型

    ABD
    C问题:一个类型可以创建多个互相独立的对象

    8、ES6类型中,对于静态属性和静态函数的操作正确的是?BC

    A、静态属性是声明在类型内部、类型方法外部的、使用let声明的变量
    B、静态属性是声明在类型内部、类型方法外部的、使用static声明的变量
    C、静态属性是属于类型的属性,所以只能被类型名称调用
    D、静态属性是属于类型的属性,所以可以被类型名称和该类型创建的所有对象调用

    BC

    9、关于函数中使用默认值,操作方式正确的是?ACD

    A、function fct(name) { name = name || 'default';... }
    B、function fct(name) {name = "default";...}
    C、function fct(name="defeult") {...}
    D、let fct = (name="default")=> {...}

    ACD
    A-原生JS中默认值的添加
    B-数据覆盖,不是默认值
    C-ES6语法中给形式参数添加默认值
    D-箭头函数中使用ES6语法的默认值

    10、面向对象的继承关系中,正确的操作语法是?A

    A、class Student extends Person {...}
    B、class Student(Person) {...}
    C、class Student extends Person() {...}
    D、class Student extends Person, Job {...}

    A
    B问题:继承语法,不是类型后面添加括号的语法
    C问题:继承的父类不能添加括号
    D问题:JS中的继承是单继承机制,不能同时继承多个类型

    二、简答题

    1、观察下面的代码,最终控制台会输出什么结果呢?请说明原因?

    let name = "TOM"
    function fn() {
        console.log(name)   // ? 
        let name = "JERRY"
    }
    fn()
    

    输出错误,let声明的变量存在暂时性死区,变量声明之前不能使用该变量

    2、梳理下面的代码,最终输出的数据是什么呢?请说明原因?

    let person = {'pName': 'OFFCN', 'pAge': 20, 'pGender': 'male'}
    let {pName: name, pAge} = person
    console.log(name)   // ①
    console.log(pName)  // ② 
    console.log(pAge)   // ③
    

    ① 输出OFFCN,别名输出,给pName的值赋值到了一个名称为name的变量中
    ② 错误,一旦出现了别名赋值,原来的属性名称就不能使用
    ③ 20
    解构赋值中,如果给一个属性添加了别名,属性名称就不能再使用了,所以pName报错

    3、解析下面的代码,最终输出什么结果?为什么?

    for ( var i = 0; i < 10; i ++ ) {
        setTimeout(function() {
            console.log(i);  // ① 10, 10, 10, 10, 10, 10, 10...
        })
    }
    for ( let j = 0; j < 10; j ++ ) {
        setTimeout(function() {
            console.log(j);  // ②
        })
    }
    

    ① 10,var声明的变量的作用域只有全局和局部,for循环中多次循环使用的是同一个作用域空间,setTimeout()延时函数会在循环全部执行完成后输出,循环中最后一次判断时i=10<10跳出循环,此时最终i的值是10;
    ② 0.1.2.3....9,let声明的变量存在块级作用域,for循环每次循环都是一个独立的作用域,延时函数执行的时候相当于在10个不同的作用域中执行,最终输出了差异化的数据

    编程题

    1、公司要给员工涨薪,并重新记录到一个新的变量中,请编写代码实现

    // 公司员工数据
    let emps = [
    {name: 'Jams Gosling', job: 'Java工程师', salary: 12000},
    {name: 'Guido Van Rossum', job: 'Python工程师', salary: 11000},
    {name: 'Brendan Eich', job: 'JavaScript工程师', salary: 12500},
    {name: 'John Resig', job: '前端工程师', salary: 12800},
    {name: 'Dennis Ritchie', job: 'C工程师', salary: 9000},
    {name: 'Bjarne Stroustrup', job: 'C++工程师', salary: 10000},
    {name: 'Tim Berners Lee', job: 'WEB工程师', salary: 13000},
    {name: 'Alan Cooper', job: 'VB工程师', salary: 8000},
    {name: 'Rob Pick', job: 'Go工程师', salary: 13000}
    ]
    

    请编写代码实现员工的涨薪操作:

    解答过程:

    var newEmps = emps.map(value=> {
        return {
            ...value,
           salary: value.salary + 1000
    }
    })
    console.log(newEmps) // 涨薪后的数组
    

    相关文章

      网友评论

          本文标题:前端面试2021-003

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