javascript必会知识及面试重点

JAVAscript面试重点

javascript必会知识及面试重点

文章插图
 
 
什么是执行上下文执行上下文就是当前 JavaScript 代码被解析和执行时所在环境的抽象概念,JavaScript 中运行任何的代码都是在执行上下文中运行
javascript必会知识及面试重点

文章插图
 
【javascript必会知识及面试重点】这是因为当函数执行的时候,首先会形成一个新的私有的作用域,然后依次按照如下的步骤执行
  • 如果有形参,先给形参赋值
  • 进行私有作用域中的预解释,函数声明优先级比变量声明高,最后后者会被前者覆盖,但是可以重新赋值
  • 私有作用域中的代码从上到下执行
闭包是什么个人理解为,闭包就是函数中的函数,里面的函数可以访问外面函数的变量,外面的变量是这个内部函数的一部分
闭包的作用
  • 使用闭包可以访问函数中的变量
  • 可以长期保存在内存中,声明周期比较长
  • 注意:闭包不能乱用,否则会导致内存泄露,影响网页的性能 。闭包使用完之后,要立即释放资源,将引用的变量指向null
闭包的主要应用
  • 函数作为参数传递
  • 函数作为返回值
异步和单线程JS 需要异步的根本原因是 JS 是单线程运行的,即在同一时间只能做一件事,不能“一心二用” 。为了利用多核CPU的计算能力,html5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM 。所以,这个新标准并没有改变JavaScript单线程的本质 。
一个 Ajax 请求由于网络比较慢,请求需要 5 秒钟 。如果是同步,这 5 秒钟页面就卡死在这里啥也干不了了 。异步的话,就好很多了,5 秒等待就等待了,其他事情不耽误做,至于那 5 秒钟等待是网速太慢,不是因为 JS 的原因
前端使用异步的场景
  • setTimeout setInterval
  • 网络请求ajax,动态加载
  • 事件绑定
原型和原型链原型:在JavaScript中原型是一个prototype对象,用于表示类型之间的关系 。
原型链:JavaScript万物都是对象,对象和对象之间也有关系,并不是孤立存在的 。对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向Object对象为止,这样就形成了一个原型指向的链条,专业术语称之为原型链 。
var Person = function(){this.name = '匿名',this.age = 18}var Student = function(){} Student.prototype = new Person(); var s1 = new Student(); DOM操作
  • 新增节点和移动节点
var div1 = document.getElementById('div1');var p1 = document.creatElement('p'); //添加新节点p1.innerHTML = "this is p1"; div1.AppendChild(p1); //添加新创建的元素var p2 = document.getElementById('p2');div1.appendChild(p2); //移动元素,这里的p2不加引号
  • 获取父元素
var div1 = document.getElementById('div1');var par = div1.parentElement;
  • 获取子元素
var p2 = document.getElementById('p2');var child = p2.childNodes; //返回子元素的标签数组DOM时间模型和事件流DOM事件模型氛围捕获和冒泡 。一个事件发生后,会在子元素和父元素之间传播,这种传播分成三个阶段
  1. 捕获阶段 事件从window对象自上而下向目标节点传播的阶段
  2. 目标阶段 真正的目标节点正在处理事件的阶段
  3. 冒泡阶段 事件从目标节点自下而上向window对象传播的阶段
捕获是从上到下,事件先从window对象,然后再到document对象,然后是html标签,(通过document.documentElement获取html标签),然后是body标签,(通过document.body获取body标签),然后按照普通的html结构一层一层往下传,最后到达目标元素
阻止冒泡
ev.stopPropagation()
javascript必会知识及面试重点

文章插图
 
事件代理(事件委托)由于事件会在冒泡的阶段向上传播到父节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件,这种方式叫做事件的代理
我们设定一种场景,一个div包含若干个a,而且还能继续增加,那如何快捷方便的为所有a绑定事件呢
javascript必会知识及面试重点

文章插图
 
如果给每个a标签都绑定一个事件,那对内存的消耗是非常巨大的,借助事件代理,我们只需要给父容器div绑定方法即可,


推荐阅读