js面试题(持续更新)

1.谈下对Promise的理解

  • Promise是用来解决回调地狱的问题的,只要要求多个异步执行的函数,必须连续顺序执行,就用Promise
    用法
  • 在前一个函数内返回Promise对象,Promise的参数中是个函数,有两个回调函数参数 resolve,reject
  • 在正常执行后,调用resolve();就会自动执行**.then(下一个函数)**
  • 在出错时,调用reject(),就会自动执行**.catch()**

ES7

  • 在ES7中,使用一个匿名函数自调包裹的
(async function(){
	try{
		await 函数(),
		await 函数()
	}catch(err){
		console.log(err);
	}
})()
  • await是等待,所有Promise中**.then的地方都可以用await**代替,它会等待当前的异步任务执行完,再开始执行当前程序之后的代码
    Promise的三个状态

  • 首次调用Promise时,整个Promise对象处于pending状态

  • 前一个任务执行完,自动调用resolve,之后整个Promise的状态变为resolved状态

  • 当任务执行出错,自动调用reject函数,整个Promise的状态变为rejected
    如果需要等待多个函数执行完,才执行

Promise.all([
	函数1(),
	函数2()
]).then(function(result){处理函数})//result会保存函数的返回值,形成数组

2.谈下什么是闭包

  • 当想即重用变量,有保护变量不被污染时用闭包
    **形成:**外层函数调用后,外层函数的作用域对象无法释放,被内层函数对象引用着
    如何形成–三步:
  • 首先外层函数包裹受保护的变量和操作变量的内层函数
  • 外层函数要返回内层函数的对象

1.return一个函数
2.或者直接将内部函数保存在一个对象的属性里面或者数组中,然后return出去

  • 调用后,用外部变量接住返回的内层函数对象,形成了闭包
    缺点:它比普通函数占用更多内存,容易造成内存泄漏
    优点:释放闭包,将引用内层函数的外部变量赋值为null

3.谈下对原型链的理解

  • 每个对象都会在其内部初始化一个Prototype属性,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,这个对象的Prototype会去找自己的prototype,就这样一直找下去,这就是原型链

4.JavaScript作用域链

  • 作用域的作用是保证执行环境里面有权访问的变量和函数是有序的,作用域的变量只能向上访问,访问到window对象被终止,作用域链不允许向下访问

5.什么是数组,怎么用

  • 只要储存多个数据都要用数组,便于维护和查找
  • 分为索引数组和关联数组,二维数组
  • 索引数组:下标都是数字的数组
  • 关联数组:自定义下表名称的数组
  • 二维数组:数组中的元素,又是一个子数组
    怎么用创建:直接创建数组 var arr=[];或者用new创建var arr=new Array();
    如果创建数组时,已经知道数组的内容,数组直接量var arr=[1,2,3],用new 创建

6.JS的基本类型

undefined,null,Boolean,Number,String

7.JS有哪些内置对象

Object是JavaScript中所有对象的父对象
数据封装类对象:Array,Object,String,boolean,Number
其他类对象
1.Arguments
2.Error 异常对象,
3.Function 函数构造器,
4.Math 数学对象
5.RegExp 正则表达式对象.
6.Date 时间对象

8.说几条JavaScript的基本规范

1.不要在同一行声明多个变量
2.在和truefalse比较的时候用===或者!==,undefined和null也是用===
3.使用对象字面量替代new Array这种形式
4.不要使用全局函数,容易造成全局污染
5.For循环必须使用大括号
6.if语句必须使用大括号

9.谈谈This的对象的理解

  • this总是指向函数的直接调用者
  • 如果有new,指向new出来那个对象
  • 但是IE的绑定事件总是指向全局对象window

10.null和undefined的区别

null代表一个对象被定义了,值为空值
undefined代表不存在这个值,没有定义
注意:在验证null,一定要使用===,因为==无法分别null和undefined

11.JavaScript如何实现继承

1.构造原型 2.原型继承 3.实例继承 4.拷贝继承
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值