-
var与let/const的区别
-
let/const 声明的变量只在let/const 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
-
使用 let/const关键字声明的全局作用域变量不属于 window 对象,所以不可以用window. 变量名的方式访问这些变量。
-
Var会提升,let const不会
-
Var可以重复声明,let const不可以
-
Let声明的变量可以重复赋值,const不可以
-
Let和var都用于声明变量,const用于声明常量
-
-
模板字符串
-
使用一对反引号包裹字符串,使用${}放置变量
-
优点:可以多行字符串换行书写,可以使用变量和表达式,不用用+拼接了
-
-
解构赋值简介
-
解构赋值:按照一定的模式,从数组 / 对象中提取值,并对变量进行赋值
-
数组解构按位置解构
-
对象解构按属性名解构
-
-
js function和 箭头函数区别?
-
箭头函数不可以当做构造函数,也就是说,不可以使用 new 命令,否则会抛出错误。
-
this、arguments、caller等对象在箭头函数体内都不存在。
-
箭头函数this指向上一层作用域,function的this指向调用它的对象
-
-
函数重载
-
函数名相同,函数的参数不同 (包括参数个数和参数类型),根据参数的不同去执行不同的操作。
-
-
js 函数尾调用
-
在函数的最底部发起另一个函数的调用就是函数尾调用
-
目的时为了节约性能
-
一个函数返回的是另一个函数的调用结果,那么就被称为尾调用
-
-
链式调用
-
在构造函数中创建方法时,return this 返回当前调用方法的对象,可以实现链式调用方法
-
-
常见的浏览器内核有哪些 ?
-
Trident 内核:IE, 360,搜狗浏览器 MaxThon、TT、The World,等。[又称 MSHTML]
-
Gecko 内核:火狐,FF,MozillaSuite / SeaMonkey 等
-
Presto 内核:Opera7 及以上。[Opera 内核原为:Presto,现为:Blink]
-
Webkit 内核:Safari,Chrome 等。 [ Chrome 的:Blink(WebKit 的分支)]
-
-
解释清楚 null 和 undefined?
-
null 用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。 null 表示"没有对象",即该处不应该有值。
-
当声明的变量还未被初始化时,变量的默认值为 undefined。 undefined 表示"缺少值",就是此处应该有一个值,但是还没有定义。
-
-
讲一下 prototype 是什么东西,原型链的理解,什么时候用 prototype ?
-
prototype 是函数对象上面预设的对象属性。
-
-
函数里的 this 什么含义,什么情况下,怎么用 ?
-
this 是 Javascript 语言的一个关键字。
-
它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。
-
随着函数使用场合的不同,this 的值会发生变化。
-
但是有一个总的原则,那就是 this 指的是,调用函数的那个对象。
-
-
apply 和 call 什么含义,什么区别 ?什么时候用 ?
-
call,apply 都属于 Function.prototype 的一个方法,它是 JavaScript 引擎内在实现的,因为属于 Function.prototype,所以每个 Function 对象实例(就是每个方法)都有 call,apply 属性。
-
Call入参是序列,apply入参是数组,两个方法都会让函数立即执行
-
-
请描述一下 cookies,sessionStorage 和 localStorage 的区别?
-
共同点:都是保存在浏览器端,且同源的。
-
区别
-
cookie 数据始终在同源的 http 请求中携带(即使不需要),即 cookie 在浏览器和服务器间来回传递。
-
而 sessionStorage 和 localStorage 不会自动把数据发给服务器,仅在本地保存。
-
cookie 数据还有路径(path)的概念,可以限制 cookie 只属于某个路径下。
-
存储大小限制也不同,cookie 数据不能超过 4k,同时因为每次 http 请求都会携带 cookie,所以 cookie 只适合保存很小的数据,如会话标识。
-
sessionStorage 和 localStorage 虽然也有存储大小的限制,但比 cookie 大得多,可以达到 5M 或更大。
-
数据有效期不同,sessionStorage:仅在当前浏览器窗口关闭前有效,自然也就不可能持久保持;localStorage:始终有效,窗口或浏览器关闭也一直保存,因此用作持久数据;cookie 只在设置的 cookie 过期时间之前一直有效,即使窗口或浏览器关闭。
-
作用域不同,sessionStorage 在不同的浏览器窗口中不共享,即使是同一个页面;cookie 和 localStorage 在所有同源窗口中都是共享的。
-
-
-
从敲入 URL 到渲染完成的整个过程,包括 DOM 构建的过程?
-
用户输入 url 地址,浏览器根据域名寻找 IP 地址
-
浏览器向服务器发送 http 请求,如果服务器段返回以 301 之类的重定向,浏览器根据相应头中的 location 再次发送请求
-
服务器端接受请求,处理请求生成 html 代码,返回给浏览器,这时的 html 页面代码可能是经过压缩的
-
浏览器接收服务器响应结果,如果有压缩则首先进行解压处理,紧接着就是页面解析渲染
-
解析渲染该过程主要分为以下步骤:解析 HTML、构建 DOM 树、DOM 树与 CSS 样式进行附着构造呈现树
-
布局
-
绘制
-
-
JavaScript工厂函数是什么?
-
工厂函数是用于创建对象的一个函数。这些内建函数都是类对象,调用时实际上是创建了一个类实例,也就是先利用类创建一个对象,然后返回这个对象,创建的函数都拥有相同的属性。
-
它是一个函数。
-
它用来创建对象。
-
它像工厂一样,“生产”出来的函数都是“标准件”(拥有同样的属性)
-
-
原型链--函数与对象的关系
-
Function函数是所有函数的祖先函数
-
所有构造函数都有一个prototype属性,叫原型对象,也称为显式原型
-
所有原型对象都有一个constructor属性,指向被new的构造函数
-
被new出来的对象叫实例对象,它们都有一个__proto_对象,叫隐式原型,它指向构造函数的prototype对象
-
原型链就是当从对象上获取属性的时候,它的查找顺序先从对象自身找,如果没有就沿着__proto__一直找,这个寻找过程叫原型链
-
-
Js 更改this指向的三种方法
-
call 方法
-
语法:函数名.call(调用者, 参数1, …)
-
作用:函数被借用时,会立即执行,并且函数体内的this会指向借用者或调用者
-
-
apply方法
-
语法:函数名.apply(调用者, [参数, …])
-
作用:函数被借用时,会立即执行,并且函数体内的this会指向借用者或调用者
-
-
bind方法
-
语法:函数名.bind(调用者, 参数, …)
-
作用:函数被借用时,不会立即执行,而是返回一个新的函数。需要自己手动调用新的函数来改变this指向
-
-
总结:
-
相同点: 三者都可以把一个函数应用到其他对象身上,注意不是自身对象
-
不同点:
-
call,apply是直接执行函数调用。bind是绑定,执行需要再次调用。
-
call,bind接收逗号分隔的无限个参数列表;apply接收数组作为参数。
-
-
-
-
Es6的class类?
-
Class类是使用函数的prototype对象封装的,可以实现封装,多态和继承。
-
类有constructor函数作为初始化类时调用的第一个构造函数
-
类使用extends实现类之间的继承
-
循环递归
深拷贝