闭包
关键点作用:能够在函数定义的作用域外,使用函数定义作用域内的局部变量,并且不会污染全局。
原理:基于词法作用域链和垃圾回收机制,通过维持函数作用域的引用,让函数作用域可以在当前作用域外被访问到。
什么是闭包?12345678910function foo() { var a = "wn244"; function bar() { console.log(a); } return bar;}var baz = foo();baz(); // wn244
在这个例子中,函数 bar 作为返回值返回后,在自己定义的词法作用域以外的地方执行。一般来说,在函数 foo 执行后,通常会期待函数 foo 的整个内部作用域被引擎回收机制销毁。而闭包可以阻止这件事情的发生。事实上内部作用域依然存在,因为函数 bar 本身在使用,所以并不会被回收。
在 JavaScript 中,每当创建一个函数,闭包就会在函数创建的同时被创建出来。
闭包的应用无论何时何地,如果将函数作为返回值,就会看到闭包在这些函数中的应用。在定时器,事件监听器 ...
JavaScript的数据类型
JavaScript数据类型分为两类:一类是基本数据类型也叫简单数据类型,另一类是引用数据类型也叫复杂数据类型。
数据类型
基本数据类型:number、string、null、undefined、Symbol、BigInt、boolean
引用数据类型:Object(function、object、array)
区别
基本数据类型和引用数据类型它们在内存中的存储方式不同。
基本数据类型是直接存储在栈中的简单数据段,占据空间小,属于被频繁使用的数据。
引用数据类型是存储在堆内存中,占据空间大。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址,当解释器寻找引用值时,会检索其在栈中的地址,取得地址后从堆中获得实体。
SymbolES6新出的一种数据类型,这种数据类型的特点就是没有重复的数据,可以作为object的key。
数据的创建方法Symbol(),因为它的构造函数不够完整,所以不能使用new Symbol()创建数据。由于Symbol()创建数据具有唯一性,所以 Symbol() !== Symbol(), 同时使用Symbol数据作为k ...
cookie、sessionStorage和localStorage的区别
共同点Cookie、SessionStorage、 LocalStorage都是浏览器的本地存储。都是存储在浏览器本地的
Cookie、SessionStorage、 LocalStorage数据共享都遵循同源原则,SessionStorage还限制必须是同一个页面。
区别
写入方式:
cookie是由服务器端写入的,而SessionStorage、 LocalStorage都是由前端写入的
生命周期:
cookie的生命周期是由服务器端在写入的时候就设置好的
LocalStorage是写入就一直存在,除非手动清除
SessionStorage是页面关闭的时候就会自动清除。
存储大小:
cookie的存储空间比较小大概4KB
SessionStorage、 LocalStorage存储空间比较大,大概5M。
在前端给后端发送请求的时候会自动携带Cookie中的数据,但是SessionStorage、 LocalStorage不会
应用场景由于它们的以上区别,所以它们的应用场景也不同:
Cookie一般用于存储登录验证信息SessionID或者token
LocalSto ...
浏览器页面之间通信
localStorage一个页面通过storage存储消息,另一个页面监听storage捕获消息
storage只能够监听同一浏览器下同源且非同一页面中的storage变化,sessionStorage只在同一会话中共享
12//页面1localStorage.setItems("msg", 1111)
1234//页面2window.addEventListener("storage",e=> { console.log(e.newValue)})
cookie一个页面向cookie中存储消息,另一个页面通过轮巡监听cookie捕获消息
postMessagewindow.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以及主机 (两个页面的模数 Document.domain设置为相同的值) 时,这两个脚本才能相互通信。window.postMessage() 方法提供了一种受 ...
