说一下重绘、重排区别如何避免? 说一说 Vue 列表为什么加 key? 说一说vue-router 实现懒加载的方法? 说一说前端性能优化手段? 说一说性能优化有哪些性能指标,如何量化?...变量提升成立的前提是使用Var关键字进行声明的变量,并且变量提升的时候只有声明被提升,赋值并不会被提升,同时函数的声明提升会比变量的提升优先。...现在各大浏览器通常用采用的垃圾回收有两种方法:标记清除、引用计数 1、标记清除(mark and sweep) 大部分浏览器以此方式进行垃圾回收,当变量进入执行环境(函数中声明变量,执行时)的时候...在此之后再被加上的标记的变量即为需要回收的变量,因为环境中的变量已经无法访问到这些变量 2、引用计数 另一种不太常见的垃圾回收策略是引用计数。引用计数的含义是跟踪记录每个值被引用的次数。...当声明了一个变量并将一个引用类型赋值给该变量时,则这个值的引用次数就是1。相反,如果包含对这个值引用的变量又取得了另外一个值,则这个值的引用次数就减1。
; sessionStorage和localStorage各自独立的存储空间; 6.如何实现浏览器内多个标签页之间的通信?...DOCTYPE声明位于位于HTML文档中的第一行,处于html 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。...在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。 9.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?...; sessionStorage和localStorage各自独立的存储空间; 11.如何实现浏览器内多个标签页之间的通信?...),它首先会从作用域链中的链尾也就是当前作用域进行查找是否有X属性,如果没有找到就顺着作用域链继续查找,直到查找到链头,也就是全局作用域链,仍未找到该变量的话,就认为这段代码的作用域链上不存在x变量,并抛出一个引用错误
ID 选择器,权重太高,不易维护 @require和@import支持引入css文件,避免首页产生过多HTTP请求,可以使用这两个关键字合并css文件 0 值的单位建议省略,但不强制...if (typeof localStorage !...== 'undefined') { // 此时访问 localStorage 绝对不会出现引用错误 } // Or if ('localStorage' in self) { // 此时访问...localStorage 绝对不会出现引用错误 } /* 区分 undefined */ let a = undefined; // 判断一个全局变量是否有声明 'a' in self; // true...// 判断一个变量是否为 undefined 并将未声明的引用作为 undefined 处理 typeof a !
当用户提供URL时,我们获取URL引用的页面的标题,并将其保存在应用程序的localStorage中。最后,显示应用程序中的所有链接。...在渲染器进程中添加样式 当我们在Electron应用程序中引用样式表时,很少会发生意外。稍后,我们将讨论如何使用Sass而不是Electron。...这意味着我们可以自由地使用flexbox和CSS变量等技术。 我们像在传统浏览器环境中一样引用新样式表,然后将以下内容添加到index.html的部分。...我将包含链接到样式表的HTML标记—因为,在我作为web开发人员的20年里,我仍然不记得如何第一次尝试就做到这一点。 列表2.11 在HTML文档中引用样式表: ....我们如何知道用户将什么设置为默认浏览器?我们当然不想做任何侥幸的猜测,因为我们不知道用户安装了什么浏览器,而且没有人喜欢看到错误的应用程序仅仅因为他们点击了一个链接就开始打开。
块级作用域解决了ES5中的两个问题:内层变量可能覆盖外层变量用来计数的循环变量泄露为全局变量(2)变量提升: var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错...var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。(4)重复声明: var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。...const和let不允许重复声明变量。(5)暂时性死区: 在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。...(6)初始值设置: 在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。(7)指针指向: let和const都是ES6新增的用于创建变量的语法。...let创建的变量是可以更改指针指向(可以重新赋值)。但const声明的变量是不允许改变指针的指向。
DOCTYPE声明位于位于HTML文档中的第一行,处于html 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。...在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。 7.html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?...优先级算法如何计算? CSS3新增伪类有那些?...(5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。 (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。...400-499 用于指出客户端的错误。400 1、语义有误,当前请求无法被服务器理解。401 当前请求需要用户验证 403 服务器已经理解请求,但是拒绝执行它。 500-599 用于支持服务器错误。
这个插件能够帮助你在尝试运行应用程序之前捕获并修复 Hooks 错误。...例如,下面这个 userInfo 组件会触发 exhaustive-deps 警告,因为 userId 变量在 useEffect 内部被引用,但未在依赖项数组中传递: function UserInfo...) }, []) // no userId here return User detail: } 尽管 exhaustive-deps 这条规则看起来很烦人,但它能帮助你避免由未列出的依赖项引发的错误...建议先使用 useState Hook 声明状态变量,然后使用 useEffect Hook 编写订阅,接着编写与组件作业相关的其他函数。...4 useState 的用法可以和类组件的状态完全一致,不只用于单个值 许多 useState 示例会向你展示如何通过声明多个变量来声明多个状态: const [name, setName] = useState
一个public claim name的例子是https://www.toptal.com/jwt_claims/is_admin,最佳做法是描述声明的位置放置一个文件,并让其文档可以被可以被引用。...---- 使用Laravel 5和AngularJS的JSON Web Token示例 (译注:由于对Laravel和AngularJS不熟悉,这里的以英文原文为准,同时若发现这里有错误,欢迎随时提出。...相反,我们应该将它们放在服务器环境变量中,并使用该env函数在配置文件中引用它们。...登录状态由控制器作用域中的token变量决定。...如果请求成功,则响应包含签名token,然后将其解码,并将附带的token声明(claims )信息保存到tokenClaims变量中。这通过getTokenClaims功能传递给控制器。
2、浅谈javascript中变量和函数声明的提升?...变量和函数声明的提升会被提升到最顶部去执行; 函数的提升高于变量的提升; 如果在函数内部用var声明了与外部相同的变量,则不向下寻找; 匿名函数不会被提升; 不同块中互不影响。...创建一个空对象,并且this变量引用该对象,同时还继承了该函数的原型; 属性和方法被加入到this引用的对象中; 新创建的对象由this所引用,并且最后隐式地返回this。...不支持变量名提升; 使用let声明变量会形成块级作用域; 不允许重复声明,也就是在函数内部不允许重复声明参数。 37、如何通过JS判断一个数组?...let允许声明具有块级作用域的变量、语句或表达式,不支持变量名提升。 var用来声明全局变量,支持变量名提升。 const用来声明只读引用(即指针),当被改变时就会报错。
DOCTYPE>声明位于位于HTML文档中的第一行,处于 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。 DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。..."http://www.w3.org/TR/html4/frameset.dtd"> 注意: HTML5不需要制定Doctype类型,因为: HTML5 不基于 SGML,因此不需要对DTD进行引用...,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行); 而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。...通过javascript 动态给iframe添加src属性值,可以避免这两个问题。 3....它只规定了字符的二进制代码,却没有规定如何存储这个二进制代码(一个字符可能需要多个字节,一个字节是8位二进制) UTF-8:实现Unicode的一种编码方式。
闭包是如何产生的?闭包产生的变量如何被回收?这些问题其实都可以被看作是同一个问题,那就是面试官在问你:你对JS闭包了解多少?来总结一下我听到过的答案,尽量完全复原候选人面试的时候说的原话。...预编译四部曲为:创建AO对象找形参和变量声明,将变量和形参作为AO属性名,值为undefined将实参和形参相统一在函数体里找到函数声明,值赋予函数体。最后程序输出变量值的时候,就是从AO对象中拿。.../**ps: 在执行第一行代码之前,函数声明已经创建完成.后面的对之前的声明进行了覆盖。**/检查当前环境中的变量声明并赋值为undefined。...当遇到同名的函数声明,为了避免函数被赋值为 undefined ,会忽略此声明console.log(a); // function a() {console.log('Is a ?')...不管是函数返回一个函数,还是产生了外部作用域的引用,都是有道理的。所以,什么是闭包?解释一下作用域链是如何产生的。解释一下js执行上下文的创建、执行过程。解释一下闭包所产生的变量放在哪了。
Function、RegExp 2、js变量和函数声明的提升 在js中变量和函数的声明会提升到最顶部执行 函数的提升高于变量的提升 函数内部如果用 var 声明了相同名称的外部变量,函数将不再向上寻找。...作用域链可以理解为一组对象列表,包含 父级和自身的变量对象, 因此我们便能通过作用域链访问到父级里声明的变量或者函数 25、什么是原型、原型链、继承?...3.js垃圾回收方式 有两种方式: 标记清除、引用计数 标记清除:大部分浏览器使用这种垃圾回收,当变量进入执行环境(声明变量)的时候, 垃圾回收器将该变量进行了标记,当该变量离开环境的时候,将其再度标记...它的机制就是跟踪某一个值得引用次数,当声明一个变量并且将一个引用类型 赋值给变量得时候引用次数加1,当这个变量指向其他一个时引用次数减1, 当为0时出发回收机制进行回收。..., 实际引用的是HTMLElement 6、函数式组件的props可以不用显示声明, 所以没有在props里面声明的属性都会被自动隐式解析为prop, 而普通的组件所有未声明的属性都解析到
各自优劣如何? 浏览器的本地存储主要分为Cookie、WebStorage, 其中WebStorage又可以分为localStorage和sessionStorage。...新增symbol类型 表示独一无二的值,用来定义独一无二的对象属性名; 2. const/let 都是用来声明变量,不可重复声明,具有块级作用域。存在暂时性死区,也就是不存在变量提升。...(const一般用于声明常量); 3. 变量的解构赋值(包含数组、对象、字符串、数字及布尔值,函数参数),剩余运算符(...rest); 4. 模板字符串(${data}); 5....如果是引用类型,就返回这个引用类型的对象。 作用域、作用域链 作用域负责收集和维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限。...寄生式组合继承的方式是使用超类型的原型的副本来作为子类型的原型,这样就避免了创建不必要的属性。
,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”。...引用计数的策略是跟踪记录每个值被使用的次数,当声明了一个变量并将一个引用类型赋值给该变量的时候这个值的引用次数就加1,如果该变量的值变成了另外一个,则这个值得引用次数减1,当这个值的引用次数变为0的时候...增加了let和const命令,用来声明变量。增加了块级作用域。let命令实际上就增加了块级作用域。...ES6规定,var命令和function命令声明的全局变量,属于全局对象的属性;let命令、const命令、class命令声明的全局变量,不属于全局对象的属性。。还有就是引入module模块的概念。...闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。
所以我们要用另一个 state 变量来存储错误。这样我们就能从 Hook 中返回它并能够判断是否发生了错误。...我们需要检查使用我们 Hook 的组件是否仍然被挂载,以更新我们的状态变量。否则,会有内存泄漏。...只有当监听器函数发生变化并在事件监听器方法中使用该引用时,我们才会更新该引用。...因此,此数组将包含有状态值和在将其持久存储在localStorage 中时对其进行更新的函数。 首先,我们创建将与 localStorage 同步的React状态变量。...如果在读取 localStorage 时出现错误,我们只记录一个错误并返回初始值。
前端面试基础知识题 1. js中如何判断一个值是否是数组类型?...所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。 5. “严格模式”是什么?...在创建执行上下文的过程中会做三件事:创建变量对象,创建作用域链,确定 this 指向,其中创建变量对象的过程中,首先会为 arguments 创建一个属性,值为 arguments,然后会扫码 function...函数声明,创建一个同名属性,值为函数的引用,接着会扫码 var 变量声明,创建一个同名属性,值为 undefined,这就是变量提升。...在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象然而 null 表示为全零,所以将它错误的判断为 object 。 9.
DOCTYPE>声明必须在文档的第一行,位于 标签之前, 声明不是 HTML 标签。作用是告诉浏览器用哪种模式来渲染文档。 声明没有结束标签且对大小写不敏感 严格模式也称标准模式,指浏览器会按照W3C的标准解析执行代码。...DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。 HTML5 不基于 SGML,所以不需要引用 DTD。...DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。 3 cookies,sessionStorage 和 localStorage 的区别?...有了本地数据,就可以避免数据在浏览器和服务器间不必要地来回传递。
deepCopy(obj[i]) : obj[i]; } } else { var result = obj; } return result;}如何避免回流与重绘?...var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。(4)重复声明: var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。...const和let不允许重复声明变量。(5)暂时性死区: 在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。...(6)初始值设置: 在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。(7)指针指向: let和const都是ES6新增的用于创建变量的语法。...如果是引用类型,就返回这个引用类型的对象。
使用 name 状态变量 const name = ref("Mary"); // 2. 使用一个 watcher 以持久化表单 if(name.value !...== '') { localStorage.setItem('formData', name.value); } }); 声明状态 useState 是 React Hooks 声明状态的主要途径...foo, bar} = useFeatureX(); RFC 中用 一整个章节 比较了 ref 和 reactive,在其结尾总结了使用这两个函数时可能的处理方式: 像你在正常的 JavaScript 中声明基本类型变量和对象变量那样去使用...使用 React Hooks 时一个常见的 bug 来源就是忘记在依赖项数组中详尽地声明所有依赖项;这可能让 useEffect 回调以依赖和引用了上一次渲染的陈旧数据而非最新数据从而无法被更新而告终。...其理想用例是当我们需要在多次渲染间保持引用相等性时,比如将回调传递给一个用 React.memo 定义的已优化子组件,而我们想要避免其不必要的重复渲染时。
[endif]--> 如何区分: DOCTYPE声明新增的结构元素、功能元素 3. 本地存储(Local Storage )和cookies(储存在用户本地终端上的数据)之间的区别是什么?...如何区分: DOCTYPE声明\新增的结构元素\功能元素 29. 语义化的理解? 用正确的标签做正确的事情!...它的功能是把对应的字符串解析成JS代码并运行;应该避免使用eval,不安全,非常耗性能(2个步骤,一次解析成js语句,一次执行) 27、关于事件,IE与火狐的事件机制有什么区别?如何阻止冒泡?...1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。 2、属性和方法被加入到 this 引用的对象中。...如何避免多次加载的?如何缓存的?)
领取专属 10元无门槛券
手把手带您无忧上云