JavaScript几个常问的面试题

75 阅读2分钟

1. new关键字的作用

  1. 创建一个空对象

  2. this指向这个对象

  3. 对象赋值

  4. 返回这个对象

2. 构造函数,原型对象,实例对象的关系

1.构造函数有一个属性prototype,指向自己的原型对象

2.实例对象有一个属性__proto__指向自己的原型对象

3.原型对象有一个属性constructor,指向自己的构造函数

3. js语言是通过什么技术实现面向对象继承的

是通过原型链继承的

4. 原型链终点是什么

1.终点是null

5. for-in与for-of区别

1.功能不同

 for-in是遍历数组的下标
 
 for-of是遍历数组的元素

2.原型的属性

 for-in会遍历原型的属性
 
 for-of不会遍历原型的属性

3.数据类型

 for-in可以遍历Object类型
 
 for-of不可以遍历Object类型

6. this : 谁调用我,我就指向谁

1.全局函数 : this指向window

2.对象方法 : this指向对象

3.构造函数 : this指向new创建的空对象

7. call,apply,bind区别

  1. 相同点:

    都可以改变函数内部的this指向

  2. 区别点:

    call和apply会调用函数,并且改变函数内部this指向

    call和apply传递的参数不一样, call传递参数aru1, aru2...形式apply必须数组形式[arg]

    bind不会调用函数,可以改变函数内部this指向

  3. 主要应用场景

    call调用函数并且可以传递参数

    apply经常跟数组有关系,比如借助于数学对象实现数组最大值最小值

    bind不调用函数,但是改变this指向比如改变定时器内部this的指向

简介来说:

  1. call和apply传参方式不同

  2. call,apply和bind执行机制不同

8. 什么是闭包:以下两种回答都可以'

1.闭包是一个访问其他函数内部变量的函数

2.闭包是 函数 + 上下文引用组合

简单来说: 内层函数访问外层函数的变量的组合就是闭包

闭包作用: 解决变量污染

9. 什么是递归:

函数内部调用自己

递归场景: 1.深拷贝 2.遍历dom树