随笔分类 - js
js面试题记录
摘要:函数声明式 function(a,b){return a+b} 特点:此种方式可定义命名的函数变量,而无需给变量赋值,这是一种独立的结构,不能嵌套在非功能模块中。函数名在自身作用域和父作用域内是可获取的(其他域是娶不到的)。当解析器读取js代码时,会先读取函数的声明,此种方式定义的函数在执行任何代码
阅读全文
摘要:闭包:在一个外函数中定义了一个内函数,内函数里使用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成一个闭包。一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会
阅读全文
摘要:使用构造函数创建一个实例 <script> function Person(age, name) { this.age = age this.name = name this.sing = function () { console.log("我会唱歌") } } const student = n
阅读全文
摘要:基本类型的数据赋值后,更改赋值后的变量,两者互不影响 let a = 100; let b = a; a = 200; console.log(a); // 200 console.log(b); // 100 引用类型的数据赋值后,将存放在栈内存中的地址赋值给新变量,更改赋值后的变量会影响到原数据
阅读全文
摘要:浏览器根据数据的存储方式分为栈垃圾回收和堆垃圾回收 栈垃圾回收: 当一个函数执行完毕后,其ESP(记录当前函数状态的指针)会下移指向下一个函数,这个下移操作即视为对上一个执行完毕的函数销毁其执行上下文 堆垃圾回收: 处理完栈空间的回收,堆空间的数据依然存在,这就需要垃圾回收器回收,根据数据生命周期的
阅读全文
摘要:防抖和节流都是为了解决事件被频繁触发的问题 防抖(debounce) 原理:当持续触发事件时,在设定的时间内没有再次触发事件,则事件才会处理函数一次;如果在设定时间之前再次触发该事件,则重新开启定时器,执行最后一次触发事件 应用场景: scroll事件滚动 浏览器窗口的缩放resize事件 搜索框输
阅读全文
摘要:执行js代码时,遇到同步任务,直接推入调用栈执行,遇到异步任务,将该任务挂起,等到有返回结果后放到任务队列中; 当调用栈中的任务全部执行完成后,这时开始事件循环(Eventloop),不断的访问任务队列,将其中的任务推到调用栈中执行. 事件循环的大致过程: 清空调用栈中的同步代码 执行微任务队列中的
阅读全文
摘要:事件冒泡是从当前触发事件的对象逐层向上传递,依次触发,直到document 如果需要阻止事件冒泡可以在需要阻止的事件函数中加上event.stopPropagation() <style> #box1 { width: 300px; height: 300px; background: bluevi
阅读全文
摘要:创建一个空对象 让这个新对象的圆形_proto_指向构造函数的原型prototype 让this指向新对象,然后执行构造函数的代码 如果函数没有return,或者return基本数据类型,则最终返回这个新对象;如果return的时引用数据类型,则返回这个引用类型
阅读全文
摘要:Ajax能够实现和服务器交换数据并让页面局部更新 ajax相比于传统的方式是相当于在服务器和客户端之间多了一层中间层ajax引擎,使用户和服务器操作异步化 传统方式中用户和服务器的交互 当用户发送请求时,客户端相当于暂停状态,如果服务器没有处理完,那客户端就一直处于暂停态 在发送请求时必须等到上一个
阅读全文
摘要:call()第一个参数是this的新指向;第二个参数是要传入函数的参数 let cat = { name: "喵喵" } let dog = { name: "旺财", eat(food) { console.log(this.name, "喜欢吃", food) }, eatMore(food1,
阅读全文
摘要:普通函数的this 作为函数在全局调用,this的指向是window var name = '卡卡'; function cat() { var name = '有鱼'; console.log(this.name);//卡卡 console.log(this);//window } cat();
阅读全文
摘要:双重for()循环 var arr = [1, 2, 3, 4, 5, 6, 4, 3, 8, 1] // 数组去重: // 方法1: 双重for 循环 function newArrFn(arr) { // 创建一个新的空数组 let newArr = [] for (let i = 0; i <
阅读全文
摘要:原数组改变的方法有:push() pop() shift() unshift() reverse() sort() splice()不改变原数组的方法有:concat() map() filter() join() every() some() indexOf() slice() forEach()
阅读全文
摘要:定义一个空的父类构造函数,然后通过prototype为该父类添加属性和方法 function Person(){} Person.prototype.name = "人";// 为人类创建一个name属性 Person.prototype.say = function(content){// 为人类
阅读全文
摘要:js继承的目的是重复利用另一个对象的属性和方法 原型链继承 让一个构造函数A的原型是另一个构造函数B的实例对象;那么A构造函数new出来的实例就拥有B的属性和方法 优点:父类方法可以复用 缺点:父类中的属性会被所有子类共享,当其中一个子类修改其值后,所有子类都会共享修改后的值;子类实例不能给父类构造
阅读全文
摘要:js的作用域是让我们访问变量和函数的区域,作用域规定了如何查找变量; js有两种作用域:全局作用域,局部作用域;局部作用域又可分为函数作用域,块级作用域和其它具体的作用域 全局作用域 let age= 18 function foo() { // 不是嵌套函数 // 函数内部可以访问函数外部变量 r
阅读全文
摘要:块级作用域:let和const具有块级作用域;var不具有;块级作用域解决了ES5两个问题: 内层变量可能覆盖外层变量 用来计数的循环变量会泄露为全局变量 变量提升:var存在变量;let和const不存在变量提升,即变量只能在声明之后使用,否则会报错 给全局添加属性:浏览器的全局对象是window
阅读全文
摘要:简单来说==表示相等; 表示严格相等 当进行==比较时,先检查两个值的数据类型是否相同,如果相同则进行 比较,如果不同会转换成相同的数据类型再比较; 当进行 比较时,如果两个值的数据类型不同;那么直接为false; 比较过程: == 如果两个值的数据类型相同,进行 比较 如果两个值的数据类型不同;也
阅读全文
摘要:undefined(未定义)可理解为"缺少值",即此处应该有值,却没有定义;转为数值为NaN 变量被声明但没有赋值,就等于undefined 调用函数时,该传的参数没有传,该参数为undefined 对象的某个属性没有赋值,该属性为undefined 函数没有返回值,默认返回undefined nu
阅读全文