2019春招前端面试总结(JS篇)

本文围绕JS展开,介绍其是运行在浏览器的脚本语言,具有弱类型特点。阐述了基本规范,如变量声明、数据类型及存储方式,还讲解了堆栈内存区别、数组方法、闭包、作用域链等知识,最后提及垃圾回收、this绑定、变量提升和JS单线程运行机制与事件循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS是一门什么样的语言?有什么特点

    JS是运行在浏览器中的脚本语言,不需要编译就可以由解释器直接运行的,变量松散定义,属于弱语言类型。

说几条JS的基本规范

  1. 不要在同一行声明多个变量;
  2. 用 === 代替 ==;
  3. Switch语句要有default分支
  4. 构造函数首字母大写,常量用大写字母
  5. 使用对象字面量代替new Function(){}

数据类型及存储方式

    基本数据类型:Null Undefined String Boolean Number(Symbol)

    引用类型:Object

    基本数据类型,占用内存小,大小固定,且频繁使用,存放在栈中。

    引用类型占用内存大,大小不固定存放在堆中。

 

堆内存和栈内存的区别

    栈内存存放基本数据类型和执行环境

    堆内存存放复杂的引用类型(数组就是数组,方法是代码字符串)

Typeof instanceof

    Typeof检测数据类型的方法,返回字符串

    Instanceof检测一个对象是否是某个对象的实例(确定某个值是哪种引用类型)

 

数组方法

Pop push Shift unshift reserve sort

Concat链接    slice截取   splice插入

Indexof lastindexof

Every:每一项都返回true,则返回true

Some:任一项返回true,则返回true

Map:结果组成的数组

Filter:返回true的项的数组

Foreach:没有返回值

 

闭包

闭包最常见的创建方式是在一个函数内创建另一个函数。他的作用是为了记住变量和作用域,形成一个不销毁的栈内存,方便后面调取使用。

作用域(链)

    闭包有这种能力我认为得益于作用域链,作用域链揭示了变量和函数的搜索路径。

    当一个函数被创建时,会创建一个预先包含全局变量对象的作用域链,存放在scope属性中,当这个函数执行时,会创建一个执行环境并通过复制scope属性中的作用域链创建起执行环境的作用域链,此后,又会有一个活动对象被推入执行环境的作用域的前端。

    一般来讲,当函数执行完毕后会将局部函数销毁,只留下全局作用域,但闭包不同,闭包中存着包含函数的作用域,只有当闭包销毁后,他的包含函数才能被销毁。这就是为什么他能保存变量和作用域的原因。也因为这个,他会占更多的内存,最好在我们需要的时候使用。

垃圾回收

标记清除

引用记数

New

  1. 创建一个新的对象
  2. 这个新的对象会被执行prototype链接
  3. This指向这个新的对象
  4. 如果函数没有返回其他对象,那么表达式中的函数会自动返回这个新对象

This

  1. this在函数被调用时发生绑定,他指向什么取决于在哪被调用
  2. 四种绑定方式:默认绑定、

隐式绑定(obj.foo())、

显式绑定:call(参数列)、apply(参数数组)、bind(对象,...)

New绑定

变量提升

变量在被提升到作用域前面进行声明,所以变量可以先使用后声明。

JS运行机制

Js是单线程的,优先同步任务,后执行异步任务。遇到异步任务需要挂起。

事件循环:1.所有的同步任务都在主线程上执行,形成一个执行栈。

2.主线程之外还存在着一个任务队列,只要异步操作执行完成,就到任务队列中排队

3.当执行栈中所有任务执行完毕,系统会按次序读取消息队列中的异步任务,开始执行。

4.主线程会不断重复上一步。

由于主线程不断重复获得事件,执行事件,再获得事件,执行事件称为事件循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值