js面试题

2 篇文章 0 订阅

1.简述同步和异步的区别

我们知道javascript是单线程语言
那就意味着一次只能完成一个任务,如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务。如果一个任务耗时过长,那么后面的任务就必须一直等待下去,会拖延整个程序。
为了解决这个问题JavaScript语言的设计者把所有任务分为两种:同步,异步
1.同步
同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务。

2.异步
异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。 js异步操作包括:

  1. 定时器
  2. 事件绑定
  3. 回调函数可以理解为异步(不是严谨的异步操作)
  4. AJAX中一般我们都采取异步操作(也可以同步)
  5. new Promise中的resolve()

同步和异步运行机制
(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。 只要主线程空了,就会去读取"任务队列",这就是JavaScript的运行机制。这个过程会不断重复。

2.异步加载和延迟加载

1、异步加载的方案: 动态插入script标签
2.通过ajax去获取js代码,然后通过eval执行
3.script标签上添加defer或者async属性
4.创建并插入iframe,让它异步执行js
5.延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。

3.js延迟加载的方式有哪些?

defer和async、动态创建DOM方式(创建script,插入到DOM中,加载完毕后callBack)、按需异步载入js

4.请解释一下 JavaScript 的同源策略。

概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape
Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。 这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。
指一段脚本只能读取来自同一来源的窗口和文档的属性。

5.为什么要有同源限制?

我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。
缺点: 现在网站的JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge
后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。

6.闭包的理解

在js的作用域中 函数外的作用域不能访问函数内作用域的变量,如果在函数内定义变量,通过return
一个匿名函数的方式,来访问函数内的变量,这样就形成了一个闭包 应用体现在 匿名函数自执行 闭包作用:让函数外能访问到函数内的变量
函数嵌套函数。 参数和变量不会以垃圾回收机制回收

7.什么是原型链?

JavaScript对象通过prototype指向父类对象,直到指向Object对象为止,这样就形成了一个原型指向的链条, 即原型链 访问一个对象的属性时,

  • 先在自身属性中查找,找到返回
  • 如果没有,再沿着__proto__这条链向上查找,找到返回
  • 如果最终没找到,返回undefined
  • 别名:隐式原型链
  • 作用:查找对象的属性(方法) ps:查找变量的属性用 作用域链 函数的prototype
    1.函数的prototype属性
    *每个函数都有一个prototype属性,它默认指向一个Object空对象(即称为原型对 象)
  • 原型对象中都有一个属性constructor,它指向函数对象。
    2.给原型对象添加属性(一般是方法)
  • 作用: 函数的所有实例对象自动拥有原型中的属性(方法) 显式原型与隐式原型
  1. 每个函数function都有一个prototype,即显式原型(属性)
  2. 每个实例对象都有一个__proto__,可称为隐式原型(属性)
  3. 对象隐式原型的值为其对应构造函数的显式原型的值
    proto_(隐式原型)与prototype(显式原型) 之间的关系 隐式原型指向创建这个对象的函数(constructor)的prototype 显式原型的作用:用来实现基于原型的继承与属性的共享 隐式原型的作用:构成原型链,同样用于实现基于原型的继承。举个例子,当我们访问obj这个对象中的x属性时,如果在obj中找不到,那么就会沿着__proto__依次查找。

8.Javascript有哪几种数据类型

值类型(基本类型):Number、String、Boolean、Undefined、Null
引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function),还有两个特殊的对象:正则(RegExp)和日期(Date)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值