JS基础

JS面试题(概念题)

2019-12-26  本文已影响0人  凯凯frank

1.call 和 apply异同

1)都是Fuction原型上的方法(每个方法的实例都能调用原型上的方法)
2)都是用来改变this指向,
区别:
call是一个个传参,apply是数组传参
(当参数多时,call的性能更好一点点,可以忽略不计....)

用法:

 fn.call(obj, param1, params2, params2)
 fn.apply(obj, [param1, params2, params2])

例子:

let arr = [1,2,3]
let obj = {}
function fn(x,y,z){}
fn.apply(obj, arr)// x=1, y=2, z=3
fn.call(obj, arr) //x=[1,2,3], y=undefined, z=undefined
fn.call(obj, ...arr) // es6展开运算符

2. 箭头函数和普通函数的区别是什么,箭头函数可以用new生成实例吗?

1). 箭头函数语法上比普通函数更加简洁

function fn(x){
    return function(y){
        return x + y
    }
}
var fn1 = x => y => x+ y

2). 箭头函数没有自己的this,他里面的this从属于函数所处的上下文(使用call、apply、bind等任何方式都无法改变this的指向)

var obj = { name: 'kkk'}
function fn(){
    console.log(this)
}
fn.call(obj) //fn函数中的this指向obj

var fn2 = ()=>{
    console.log(this)
}
fn2.call(obj) //fn2函数中的this指向window
fn2.bind(obj)() //fn2函数中的this指向window
document.body.onclick = () =>{
    //this指向 window, 不是当前的body元素
}
document.body.onclick = function(){
    //this指向body元素
    [2,3,1].sort(function(a ,b){
        //this => window, 回调函数中的this一般都是window
        return a - b;
    })
}

3). 箭头函数中没有arguments(类数组), 可以使用...arg获取参数集合(数组)

var fn = (...arg) => {
    console.log(args)
}
fn(1,2,3) // [1,2,3]

4). 箭头函数不能new(因为箭头函数没有this,也没有prototype )

3.说一说new的执行过程

function Person(name, age){
    this.name = name;
    this.age = age;
}
const obj = new Person('frank', 20)
  1. 创建一个新对象
  2. 将构造函数的作用域赋给新对象(this也指向这个新对象)
  3. 执行构造函数中的代码(为这个新对象添加属性)
  4. 返回新对象

4.说一说异步(EventLoop)

浏览器的事件循环(Event Loop)

5.说一说作用域和作用域链

作用域和作用域链

6.说一说浏览器的事件流

浏览器事件流

7.说一说浏览器的缓存机制

浏览器的缓存机制



点此查看JS面试题(算法篇)

未完待续


喜欢的朋友点个赞吧

上一篇下一篇

猜你喜欢

热点阅读