‘壹’ 学习Web前端要知道的JavaScript基础语法规则
今天小编要跟大家分享的文章是关于学习web前端要知道的JavaScript基础语法规则。俗话说,“无规矩不成方圆”。用在计算机语言上也同样使用。每种计算机语言都有自己的语法规则,只有遵循语法规则才能写出符合要求的代码。JavaScript也不例外,在使用JavaScript语言时,需要遵循某些语法规则,如执行顺序、大写和注释规范。下面我们就以来介绍下,JavaScript基础语法规则。
1.按从上到下的顺序执行
JavaScript程序按照在HTML文档中的排列顺序逐行执行。如果代码(例如函数、全局变量等)需要在整个HTML文件中使用,最好将这些代码放在HTML文件的
2.区分大小写字母
JavaScript严格区分字母大小写。也就是说,在输入关键字、函数名、变量以及其他标识符时,都必须采用正确的大小写形式。例如,变量username与变量UserName是两个不同的变量。
3.每行结尾的分号可有可无
JavaScript语言并不要求必须以分号“;”"作为语句的结束标记。如果语句的结束处没有分,JavaScript会自动将该行代码的结尾作为整个语句的结束。例如,下面两行示例代码,虽然第一行代码结尾没有写分号,但也是正确的。(注意:书写JavaScript代码时,为了保证代码的严谨性、准确性,最好在每行代码的结尾加上分号。)
alert
alert
4、注释规范
使用JavaScript时,为了使代码易于阅读,需要为
JavaScript代码加一些注释。JavaScript代码注释和CSS代码注释方式相同,也分为单行注释和多行注释,示例代码如下:
//我是单行注释
/*
我是多行注释1
我是多行注释2
我是多行注释3
*/
以上就是小编今天为大家分享的关于学习web前端要知道的JavaScript基础语法规则的文章,希望本篇文章能够对正在从事会计相关工作的小伙伴们有所帮助。想要了解更多会计相关知识记得关注北大青鸟web培训官网。最后祝愿小伙伴们工作顺利成为一名优秀的web前端工程师!
‘贰’ 前端开发时meta标签一般怎么写
注释:<meta> 标签永远位于 head 元素内部。
注释:元数据总是以名称/值的形式被成对传递的。
name属性
name属性主要用于描述网页,与之对应的属性值为content,content中的内容主要是便于搜索引擎机器人查找信息和分类信息用的。
meta标签的name属性语法格式是:<meta name="参数" content="具体的参数值">;。
其中name属性主要有以下几种参数:
A、Keywords(关键字)
说明:keywords用来告诉搜索引擎你网页的关键字是什么。
举例:<meta name ="keywords" content="science,ecation,culture,politics,ecnomics,relationships,entertainment,human">
B、description(网站内容描述)
说明:description用来告诉搜索引擎你的网站主要内容。
网站内容描述(description)的设计要点:
①网页描述为自然语言而不是罗列关键词(与keywords设计正好相反);
②尽可能准确地描述网页的核心内容,通常为网页内容的摘要信息,也就是希望搜索引擎在检索结果中展示的摘要信息;
③网页描述中含有有效关键词;
④网页描述内容与网页标题内容有高度相关性;
⑤网页描述内容与网页主体内容有高度相关性;
⑥网页描述的文字不必太多,一般不超过搜索引擎检索结果摘要信息的最多字数(通常在100中文字之内,不同搜索引擎略有差异)。
举例:<meta name="description" content="This page is about the meaning of science,ecation,culture.">
C、robots(机器人向导)
说明:robots用来告诉搜索机器人哪些页面需要索引,哪些页面不需要索引。
content的参数有all,none,index,noindex,follow,nofollow。默认是all。
举例:<meta name="robots" content="none">
D、author(作者)
说明:标注网页的作者
http-equiv属性
http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变量值。
meta标签的http-equiv属性语法格式是:<meta http-equiv="参数" content="参数变量值"> ;其中http-equiv属性主要有以下几种参数:
A、Expires(期限)
说明:可以用于设定网页的到期时间。一旦网页过期,必须到服务器上重新传输。
用法:<meta http-equiv="expires" content="Fri,12 Jan 2001 18:18:18 GMT">
注意:必须使用GMT的时间格式。
B、Pragma(cache模式)
说明:禁止浏览器从本地计算机的缓存中访问页面内容。
用法:<meta http-equiv="Pragma" content="no-cache">
注意:这样设定,访问者将无法脱机浏览。
C、Refresh(刷新)
说明:自动刷新并转到新页面。
用法:<meta http-equiv="Refresh" content="2;URL">;(注意后面的分号,分别在秒数的前面和网址的后面,URL可为空)
注意:其中的2是指停留2秒钟后自动刷新到URL网址。
D、Set-Cookie(cookie设定)
说明:如果网页过期,那么存盘的cookie将被删除。
用法:<meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday,12-Jan-2001 18:18:18 GMT; path=/">
注意:必须使用GMT的时间格式。
E、Window-target(显示窗口的设定)
说明:强制页面在当前窗口以独立页面显示。
用法:<meta http-equiv="Window-target" content="_top">
注意:用来防止别人在框架里调用自己的页面。
F、content-Type(显示字符集的设定)
说明:设定页面使用的字符集。
用法:<meta http-equiv="content-Type" content="text/html; charset=gb2312">
G、content-Language(显示语言的设定)
用法:<meta http-equiv="Content-Language" content="zh-cn" />
功能
上面我们介绍了meta标签的一些基本组成,接着我们再来一起看看meta标签的常见功能:
‘叁’ 大前端是什么和前端有区别吗
大前端:通过同一套编程代码,经过框架编译转化能够适应于多端平台的前端交互界面。说白一点,我写了一套代码,经过工具的编译之后,可以适用于微信小程序、网络小程序、支付宝小程序、头条小程序......,也就是大前端,它的关键字是多端,它解决的是多端不一致的问题,同时也节省了人力成本
前端:说白一点,就是开发交互界面,甭管你是pc页面还是移动端页面。只不过实现这些页面,它涵盖了大量的技术:HTML、CSS、JS、AJAX、DOM、BOM、HTML5、CSS3、ES6、SCSS、Less、Stylus、TypeScript、Vue、React、Angular、Bootstrap、jQuery、ECharts、Flutter、Electron、PWA、Webpack......实在太多了,
‘肆’ 亚马逊平台如何添加关键字,什么是亚马逊关键字
很多跨境电商都会使用谷歌浏览器,商家可以通过在谷歌的后台部分使用正确的关键词,相关网站的排名就会超过别人,甚至可以出现在第一页的最前几个搜索结果中。
同样的道理,当商家想在亚马逊上销售产品时,都希望自己的产品可以出现在搜索结果的第一页或更前的排名,从而提高曝光率和增加销售机会。这里的关键就在于如何做好产品研究和优化自身的listing。
如果足够了解算法的工作原理,就能有效的提高排名,并让产品可以有机会展示给更多的观众。下面我们即将深入了解后台关键词的细节,并给出一些提示,帮助大家为各自的listing选择更合适的后台关键词。:)
首先我们来了解一下,什么是后台关键词?亚马逊是允许卖家通过使用正确和合适的相关产品的后台关键词来提升评分和流量的。而这些关键词只会出现在listing的“后台”,这就代表买家或在平台上查看产品的人不会看到这些关键词,只有亚马逊才能看到这些关键词。后面它将根据你在每个帖子中包含多少相关的关键词来计算排名。
这就是为什么我们说后台关键词可以帮助提高产品的曝光率。很多人会关心:若是使用所有相关的关键词来填充listing,会不会造成listing关键词滥用的问题?答案是:并不会。因此,在前端准确使用关键词,而在后台使用其他所有你认为可以提高排名的关键词,是非常重要的。
问题又来了,要在哪里寻找和管理后台关键词呢?请看如下关于这个过程的快速概述。
过程:登录到亚马逊的卖家中心 ——导航至“inventory”选项卡 ——点击“Offer”选项卡 ——选择“Keywords”以访问隐藏的关键词部分。
2. 后台关键词的重要性
上面提到,关键词可以帮助产品获得更高更前的排名。那么,通过正确的关键词组合,就算是其它同类的产品,你的产品也会出现在它们智商。所以后台关键词是一个黄金机会,你可以通过在产品listing前端中无法被收录的关键词获得排名,而且这些无法被收录的关键词的相关性很强,搜索量和搜索结果排名都很高。
还有一个好处,除亚马逊之外没有人可以看到你所选择的关键词,这样就可以很好地保护你的关键词不被抄袭,也不会被竞争对手的企业窃取,他们会不断地通过你的关键词获得排名。
例如,如果有人搜索indoor bicycles,你的listing会出现在搜索结果中,但如果有人搜索gym equipment、home cardio equipment等你没有输入过的关键词,你的产品就根本不会出现。如果在此之前你正确地进行关键词研究,并输入所有与你产品相关的关键词,那么你的产品就会在更多的搜索结果中出现。
不同的买家在搜索自己想要的东西的时候,是会输入不同的关键词的,所以我们多次强烈建议在每一个listing的后台,都尽可能的添加到所有不同的关键词。这样可以有效增加接触到你产品的人数,相对的,销售机会也会被增加。
3.亚马逊后台关键词的索引和排名
亚马逊的产品排名是指你的产品和listing会出现在哪个位置和页面上。他们的A9算法使用了多种因素,但你每天的销售速度主要决定了你的listing排名以及他们在搜索中出现的方式。在搜索结果中,每个关键词或短语都有一个相对应的销售速度,在这个基础上决定了关键词或短语是否会获得展示。
所以基本上,你所选择的这组关键词会与亚马逊特定类目下的其他关键词的销量进行比较。这也是为什么产品在发布之后迅速获得销量非常重要。否则的话,你的listing将被引导到后几页甚至最后一页,在那里的曝光度将为零。
亚马逊80%以上的销售量都是在首页完成的,所以你的产品出现在哪一页,这一点非常重要。你需要确保你的listing完全优化过,已经被所有相关的关键词所收录了,这样才可以提高你在亚马逊上的销售额。
举个例子,如果关键词“clock”带来了30笔销售,而 “digital clock”带来了100笔销售,那么关键词“digital clock”在搜索结果中的排名会更高。
掌握了这些信息,你就能正确的选择关键词,并将其作为后台关键词添加,提高产品曝光度。
4. 亚马逊后台关键词的使用提示
选择合适的后台关键词来有话listing,其实说起来容易做起来难。必须先筛选大量的关键词,直到可以找到能提供最佳效果的关键词。下面给大家一些有用的提示,希望可以给大家提供帮助:
①、只添加最重要的关键词
后台的关键词是有字节限制的,字数是250字。这个限制其实并没有给你留太多的回旋余地,所以必须明智并准确地选择你将要使用的关键词。因为你需要尽可能多的转化率来提高你的排名并努力出现在第一结果页。所以你需要再研究关键词这个板块上花更多的时间,因为这是决定你成功的最关键因素。
你应该用谷歌关键词搜索工具与亚马逊关键词工具,这样你就能弄清楚哪些关键词对你的listing最有价值。除了最有价值的关键词外,其他的关键词都去掉,然后用在你的listing后台中。
②、不要过多地使用关键词
这意味着,你应该对每一个产品进行关键词研究。在每一个产品的listing中加入同样有价值的关键词,这似乎很有道理,但这样做只会产生负面效果。所以,与其在同一个页面上多次使用同一个关键词,不如每个关键词只使用一次。这将会比用同一个关键词过多地充斥在listing中更有可能提高排名。这一点适用于前端关键词和后台关键词。
③、标点符号
两个关键词之间留一个空白来分隔,不要使用任何的标点符号。这会大大的影响listing中的关键词搜索。
④、密切关注关键词的表现
虽然说选择合适的关键词是关键,但其实这只是一半的工作。添加关键词并不是一次性任务,需要时刻检查自己的listing和关键词的表现如何。
重新检查后台关键词,看看它们是否为listing带来足够的流量,这与选择正确的关键词同样重要。密切监控它们的表现,用那些排名不好的关键词替换掉那些排名好的关键词。但是,要记住,对于关键词所做的任何改变都需要时间才能让你重新获得排名。这就是为什么第一时间选择最好的关键词很重要。
你可以随时修改后台关键词。即使你可以修改后台关键词,也不要太过频繁。每个新的关键词被索引、获得排名都需要时间,这意味着这期间的流量会变小。定期检查关键词的表现如何,只修改那些你真正需要修改的关键词。
⑤、忽略复数词
亚马逊会自动识别单复数同型的单词,所以合理输入单词也可以有效地省一个字节。
⑥、研究亚马逊的指南和建议
在你成为亚马逊上的卖家的那一刻,你将获得各种关于后台关键词管理的指南和规则。你还会得到一个规则listing,如果你遵守这些规则,你就能让你的产品迅速被潜在客户看到。以下是一些基本的规则,需要牢记在心。
- 使用关键词来锁定受众
如果你不确定要使用哪个关键词,请思考一些问题,比如产品是为谁设计的,谁经常使用?回答了这些问题,你就会缩小到你的目标受众。例如,以烹饪设备为例。你的目标受众是家庭主妇、厨师、面包师等。
- 使用相关的关键词,只使用那些与产品相关的关键词。不要以为使用了热门关键词就能获得更好的排名。这是个大忌。亚马逊在确保产生搜索结果准确方面付出了很多努力。使用不相关的关键词会降低转化率。避免使用所有与你的产品无关的关键词。
- 合理的顺序很重要,关键词要有逻辑性,以提高你的排名。例如,假设你想买plastic ice-cream cups。你要搜索“plastic ice-cream cups”,而不是“cups plastic ice-cream”。关键字要有一个合理的顺序,所以不要把颜色和形状放在物品本身之前。
- 避免使用品牌名称,亚马逊对品牌后台关键词的要求非常严格。如果你卖的是耐克运动鞋,不要在关键词中使用品牌名称。使用sports shoes、sneakers、outdoor running shoes等词。无论怎样都不要使用品牌名称。
以上,是我们针对亚马逊后台关键词的一些见解和提示建议,希望对大家有帮助!祝大家前程似锦。有关跨境电商的问题都可以找我们咨询。
‘伍’ 整理涵盖很全很广的前端知识点
HTML、CSS相关
html5新特性、语义化
浏览器渲染机制、重绘、重排
网页生成过程:
重排(也称回流): 当 DOM 的变化影响了元素的几何信息( DOM 对象的位置和尺寸大小),浏览器需要重新计算元素的几何属性,将其安放在界面中的正确位置,这个过程叫做重排。 触发:
重绘: 当一个元素的外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘。 触发:
重排优化建议:
transform 不重绘,不回流 是因为 transform 属于合成属性,对合成属性进行 transition/animate 动画时,将会创建一个合成层。这使得动画元素在一个独立的层中进行渲染。当元素的内容没有发生改变,就没有必要进行重绘。浏览器会通过重新复合来创建动画帧。
css盒子模型
所有 HTML 元素可以看作盒子,在CSS中, "box model" 这一术语是用来设计和布局时使用。 CSS 盒模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边距,边框,填充,和实际内容。 盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。
css样式优先级
!important>style>id>class
什么是BFC?BFC的布局规则是什么?如何创建BFC?BFC应用?
BFC 是 Block Formatting Context 的缩写,即块格式化上下文。 BFC 是CSS布局的一个概念,是一个环境,里面的元素不会影响外面的元素。 布局规则:Box是CSS布局的对象和基本单位,页面是由若干个Box组成的。元素的类型和display属性,决定了这个Box的类型。不同类型的Box会参与不同的 Formatting Context 。 创建:浮动元素 display:inline-block position:absolute 应用: 1.分属于不同的 BFC 时,可以防止 margin 重叠 2.清除内部浮动 3.自适应多栏布局
DOM、BOM对象
BOM(Browser Object Model) 是指浏览器对象模型,可以对浏览器窗口进行访问和操作。使用 BOM,开发者可以移动窗口、改变状态栏中的文本以及执行其他与页面内容不直接相关的动作。 使 JavaScript 有能力与浏览器"对话"。 DOM (Document Object Model) 是指文档对象模型,通过它,可以访问 HTML 文档的所有元素。 DOM 是 W3C (万维网联盟)的标准。 DOM 定义了访问 HTML 和 XML 文档的标准: "W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。" W3C DOM 标准被分为 3 个不同的部分:
什么是 XML DOM ? XML DOM 定义了所有 XML 元素的对象和属性,以及访问它们的方法。 什么是 HTML DOM? HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它们的方法。
JS相关
js数据类型、typeof、instanceof、类型转换
闭包(高频)
闭包是指有权访问另一个函数作用域中的变量的函数 ——《JavaScript高级程序设计》
当函数可以记住并访问所在的词法作用域时,就产生了闭包,
即使函数是在当前词法作用域之外执行 ——《你不知道的JavaScript》
原型、原型链(高频)
原型: 对象中固有的 __proto__ 属性,该属性指向对象的 prototype 原型属性。
原型链: 当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去它的原型对象里找这个属性,这个原型对象又会有自己的原型,于是就这样一直找下去,也就是原型链的概念。原型链的尽头一般来说都是 Object.prototype 所以这就是我们新建的对象为什么能够使用 toString() 等方法的原因。
特点: JavaScript 对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变。
this指向、new关键字
this 对象是是执行上下文中的一个属性,它指向最后一次调用这个方法的对象,在全局函数中, this 等于 window ,而当函数被作为某个对象调用时,this等于那个对象。 在实际开发中, this 的指向可以通过四种调用模式来判断。
new
作用域、作用域链、变量提升
继承(含es6)、多种继承方式
(1)第一种是以 原型链的方式来实现继承 ,但是这种实现方式存在的缺点是,在包含有引用类型的数据时,会被所有的实例对象所共享,容易造成修改的混乱。还有就是在创建子类型的时候不能向超类型传递参数。
(2)第二种方式是使用 借用构造函数 的方式,这种方式是通过在子类型的函数中调用超类型的构造函数来实现的,这一种方法解决了不能向超类型传递参数的缺点,但是它存在的一个问题就是无法实现函数方法的复用,并且超类型原型定义的方法子类型也没有办法访问到。
(3)第三种方式是 组合继承 ,组合继承是将原型链和借用构造函数组合起来使用的一种方式。通过借用构造函数的方式来实现类型的属性的继承,通过将子类型的原型设置为超类型的实例来实现方法的继承。这种方式解决了上面的两种模式单独使用时的问题,但是由于我们是以超类型的实例来作为子类型的原型,所以调用了两次超类的构造函数,造成了子类型的原型中多了很多不必要的属性。
(4)第四种方式是 原型式继承 ,原型式继承的主要思路就是基于已有的对象来创建新的对象,实现的原理是,向函数中传入一个对象,然后返回一个以这个对象为原型的对象。这种继承的思路主要不是为了实现创造一种新的类型,只是对某个对象实现一种简单继承,ES5 中定义的 Object.create() 方法就是原型式继承的实现。缺点与原型链方式相同。
(5)第五种方式是 寄生式继承 ,寄生式继承的思路是创建一个用于封装继承过程的函数,通过传入一个对象,然后复制一个对象的副本,然后对象进行扩展,最后返回这个对象。这个扩展的过程就可以理解是一种继承。这种继承的优点就是对一个简单对象实现继承,如果这个对象不是我们的自定义类型时。缺点是没有办法实现函数的复用。
(6)第六种方式是 寄生式组合继承 ,组合继承的缺点就是使用超类型的实例做为子类型的原型,导致添加了不必要的原型属性。寄生式组合继承的方式是使用超类型的原型的副本来作为子类型的原型,这样就避免了创建不必要的属性。
EventLoop
JS 是单线程的,为了防止一个函数执行时间过长阻塞后面的代码,所以会先将同步代码压入执行栈中,依次执行,将异步代码推入异步队列,异步队列又分为宏任务队列和微任务队列,因为宏任务队列的执行时间较长,所以微任务队列要优先于宏任务队列。微任务队列的代表就是, Promise.then , MutationObserver ,宏任务的话就是 setImmediate setTimeout setInterval
原生ajax
ajax 是一种异步通信的方法,从服务端获取数据,达到局部刷新页面的效果。 过程:
事件冒泡、捕获(委托)
event.stopPropagation() 或者 ie下的方法 event.cancelBubble = true; //阻止事件冒泡
ES6
Vue
简述MVVM
MVVM 是 Model-View-ViewModel 缩写,也就是把 MVC 中的 Controller 演变成 ViewModel。Model 层代表数据模型, View 代表UI组件, ViewModel 是 View 和 Model 层的桥梁,数据会绑定到 viewModel 层并自动将数据渲染到页面中,视图变化的时候会通知 viewModel 层更新数据。
谈谈对vue生命周期的理解?
每个 Vue 实例在创建时都会经过一系列的初始化过程, vue 的生命周期钩子,就是说在达到某一阶段或条件时去触发的函数,目的就是为了完成一些动作或者事件
computed与watch
watch 属性监听 是一个对象,键是需要观察的属性,值是对应回调函数,主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作,监听属性的变化,需要在数据变化时执行异步或开销较大的操作时使用
computed 计算属性 属性的结果会被缓存,当 computed 中的函数所依赖的属性没有发生改变的时候,那么调用当前函数的时候结果会从缓存中读取。除非依赖的响应式属性变化时才会重新计算,主要当做属性来使用 computed 中的函数必须用 return 返回最终的结果 computed 更高效,优先使用
使用场景 computed :当一个属性受多个属性影响的时候使用,例:购物车商品结算功能 watch :当一条数据影响多条数据的时候使用,例:搜索数据
v-for中key的作用
vue组件的通信方式
父子组件通信
父->子 props ,子->父 $on、$emit` 获取父子组件实例 parent、 parent 、children Ref 获取实例的方式调用组件的属性或者方法 Provide、inject` 官方不推荐使用,但是写组件库时很常用
兄弟组件通信
Event Bus 实现跨组件通信 Vue.prototype.$bus = new Vue() Vuex
跨级组件通信
$attrs、$listeners Provide、inject
常用指令
双向绑定实现原理
当一个 Vue 实例创建时,Vue会遍历data选项的属性,用 Object.defineProperty 将它们转为 getter/setter并且在内部追踪相关依赖,在属性被访问和修改时通知变化。每个组件实例都有相应的 watcher 程序实例,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher重新计算,从而致使它关联的组件得以更新。
v-model的实现以及它的实现原理吗?
nextTick的实现
vnode的理解,compiler和patch的过程
new Vue后整个的流程
思考:为什么先注入再提供呢??
答:1、首先来自祖辈的数据要和当前实例的data,等判重,相结合,所以注入数据的initInjections一定要在 InitState 的上面。2. 从上面注入进来的东西在当前组件中转了一下又提供给后代了,所以注入数据也一定要在上面。
vm.[Math Processing Error]mount(vm.mount(vm.options.el) :挂载实例。
keep-alive的实现
作用:实现组件缓存
钩子函数:
原理: Vue.js 内部将 DOM 节点抽象成了一个个的 VNode 节点, keep-alive 组件的缓存也是基于 VNode 节点的而不是直接存储 DOM 结构。它将满足条件 (pruneCache与pruneCache) 的组件在 cache 对象中缓存起来,在需要重新渲染的时候再将 vnode 节点从 cache 对象中取出并渲染。
配置属性:
include 字符串或正则表达式。只有名称匹配的组件会被缓存
exclude 字符串或正则表达式。任何名称匹配的组件都不会被缓存
max 数字、最多可以缓存多少组件实例
vuex、vue-router实现原理
vuex 是一个专门为vue.js应用程序开发的状态管理库。 核心概念:
你怎么理解Vue中的diff算法?
在js中,渲染真实 DOM 的开销是非常大的, 比如我们修改了某个数据,如果直接渲染到真实 DOM , 会引起整个 dom 树的重绘和重排。那么有没有可能实现只更新我们修改的那一小块dom而不要更新整个 dom 呢?此时我们就需要先根据真实 dom 生成虚拟 dom , 当虚拟 dom 某个节点的数据改变后会生成有一个新的 Vnode , 然后新的 Vnode 和旧的 Vnode 作比较,发现有不一样的地方就直接修改在真实DOM上,然后使旧的 Vnode 的值为新的 Vnode 。
diff 的过程就是调用 patch 函数,比较新旧节点,一边比较一边给真实的 DOM 打补丁。在采取 diff 算法比较新旧节点的时候,比较只会在同层级进行。 在 patch 方法中,首先进行树级别的比较 new Vnode 不存在就删除 old Vnode old Vnode 不存在就增加新的 Vnode 都存在就执行diff更新 当确定需要执行diff算法时,比较两个 Vnode ,包括三种类型操作:属性更新,文本更新,子节点更新 新老节点均有子节点,则对子节点进行 diff 操作,调用 updatechidren 如果老节点没有子节点而新节点有子节点,先清空老节点的文本内容,然后为其新增子节点 如果新节点没有子节点,而老节点有子节点的时候,则移除该节点的所有子节点 老新老节点都没有子节点的时候,进行文本的替换
updateChildren 将 Vnode 的子节点Vch和oldVnode的子节点oldCh提取出来。 oldCh和vCh 各有两个头尾的变量 StartIdx和EndIdx ,它们的2个变量相互比较,一共有4种比较方式。如果4种比较都没匹配,如果设置了 key ,就会用 key 进行比较,在比较的过程中,变量会往中间靠,一旦 StartIdx>EndIdx 表明 oldCh和vCh 至少有一个已经遍历完了,就会结束比较。
你都做过哪些Vue的性能优化?
你知道Vue3有哪些新特性吗?它们会带来什么影响?
更小巧、更快速 支持自定义渲染器 支持摇树优化:一种在打包时去除无用代码的优化手段 支持Fragments和跨组件渲染
模板语法99%保持不变 原生支持基于class的组件,并且无需借助任何编译及各种stage阶段的特性 在设计时也考虑TypeScript的类型推断特性 重写虚拟DOM 可以期待更多的编译时提示来减少运行时的开销 优化插槽生成 可以单独渲染父组件和子组件 静态树提升 降低渲染成本 基于Proxy的观察者机制 节省内存开销
检测机制 更加全面、精准、高效,更具可调试式的响应跟踪
实现双向绑定 Proxy 与 Object.defineProperty 相比优劣如何?
React
1、react中key的作用,有key没key有什么区别,比较同一层级节点什么意思?
2、你对虚拟dom和diff算法的理解,实现render函数
虚拟DOM 本质上是 JavaScript 对象,是对 真实DOM 的抽象表现。 状态变更时,记录新树和旧树的差异 最后把差异更新到真正的 dom 中 render函数:
3、React组件之间通信方式?
Context 提供了一个无需为每层组件手动添加 props ,就能在组件树间进行数据传递的方法.如果你只是想避免层层传递一些属性,组件组合( component composition )有时候是一个比 context 更好的解决方案。 5. 组件组合缺点:会使高层组件变得复杂
4、如何解析jsx
5、生命周期都有哪几种,分别是在什么阶段做哪些事情?为什么要废弃一些生命周期?
componentWillMount、componentWillReceiveProps、componentWillUpdate在16版本被废弃,在17版本将被删除,需要使用UNSAVE_前缀使用,目的是向下兼容。
6、关于react的优化方法
使用return null而不是CSS的display:none来控制节点的显示隐藏。保证同一时间页面的DOM节点尽可能的少。
不要使用数组下标作为key 利用 shouldComponentUpdate 和 PureComponent 避免过多 render function ; render 里面尽量减少新建变量和bind函数,传递参数是尽量减少传递参数的数量。 尽量将 props 和 state 扁平化,只传递 component 需要的 props (传得太多,或者层次传得太深,都会加重 shouldComponentUpdate 里面的数据比较负担),慎将 component 当作 props 传入
使用 babel-plugin-import 优化业务组件的引入,实现按需加载 使用 SplitChunksPlugin 拆分公共代码 使用动态 import ,懒加载 React 组件
7、绑定this的几种方式
8、对fiber的理解
9、setState是同步还是异步的
10、Rex、React-Rex
Rex的实现流程
用户页面行为触发一个 Action ,然后 Store 调用 Recer ,并且传入两个参数:当前 State 和收到的 Action 。 Recer 会返回新的 State 。每当 state 更新之后, view 会根据 state 触发重新渲染。
React-Rex:
Provider :从最外部封装了整个应用,并向 connect 模块传递 store 。 Connect :
11、对高阶组件的理解
高阶组件是参数为组件,返回值为新组件的函数。 HOC 是纯函数,没有副作用。 HOC 在 React 的第三方库中很常见,例如 Rex 的 connect 组件。
高阶组件的作用:
12、可以用哪些方式创建 React 组件?
React.createClass()、ES6 class 和无状态函数
13、 React 元素与组件的区别?
组件是由元素构成的。元素数据结构是普通对象,而组件数据结构是类或纯函数。
Vue与React对比?
数据流:
react 主张函数式编程,所以推崇纯组件,数据不可变,单向数据流,
vue 的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。
监听数据变化实现原理 :
组件通信的区别:jsx和.vue模板。
性能优化
vuex 和 rex 之间的区别?
从实现原理上来说,最大的区别是两点:
Rex 使用的是不可变数据,而 Vuex 的数据是可变的。 Rex 每次都是用新的 state 替换旧的 state ,而 Vuex 是直接修改
Rex 在检测数据变化的时候,是通过 diff 的方式比较差异的,而 Vuex 其实和Vue的原理一样,是通过 getter/setter 来比较的(如果看 Vuex 源码会知道,其实他内部直接创建一个 Vue 实例用来跟踪数据变化)
浏览器从输入url到渲染页面,发生了什么?
网络安全、HTTP协议
TCP UDP 区别
Http和Https区别(高频)
GET和POST区别(高频)
理解xss,csrf,ddos攻击原理以及避免方式
XSS ( Cross-Site Scripting , 跨站脚本攻击 )是一种代码注入攻击。攻击者在目标网站上注入恶意代码,当被攻击者登陆网站时就会执行这些恶意代码,这些脚本可以读取 cookie,session tokens ,或者其它敏感的网站信息,对用户进行钓鱼欺诈,甚至发起蠕虫攻击等。
CSRF ( Cross-site request forgery ) 跨站请求伪造 :攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
XSS避免方式:
CSRF 避免方式:
DDoS 又叫分布式拒绝服务,全称 Distributed Denial of Service ,其原理就是利用大量的请求造成资源过载,导致服务不可用。
‘陆’ 前端js的三种解码方式
** 只有 0-9[a-Z] $ - _ . + ! * ' ( ) , 以及某些保留字,才能不经过编码直接用于 URL。
***例如:搜索的中文关键字,复制网址之后再粘贴就会发现该URL已经被转码。
1) escape 和 unescape
原理:对除ASCII字母、数字、标点符号 @ * _ + - . / 以外的其他字符进行编码。
编码:
eg:escape('http://www..com?name=zhang@xiao@jie&order= 你好')
res:"http%3A//www..com%3Fname%3Dzhang@xiao@jie%26order%3D%u4F60%u597D"
解码:
eg:unescape("http%3A//www..com%3Fname%3Dzhang@xiao@jie%26order%3D%u4F60%u597D")
res:" http://www..com?name=zhang@xiao@jie&order= 你好"
2) encodeURI 和 decodeURI
原理:返回编码为有效的统一资源标识符 (URI) 的字符串,不会被编码的字符:! @ # $ & * ( ) = : / ; ? + '
encodeURI()是Javascript中真正用来对URL编码的函数。
编码:
eg:encodeURI('http://www..com?name=zhang@xiao@jie&order= 你好')
res:" http://www..com?name=zhang@xiao@jie&order=%E4%BD%A0%E5%A5%BD "
解码:
eg:decodeURI(" http://www..com?name=zhang@xiao@jie&order=%E4%BD%A0%E5%A5%BD ")
res:" http://www..com?name=zhang@xiao@jie&order= 你好"
3) encodeURIComponent 和 decodeURIComponent
原理:对URL的组成部分进行个别编码,而不用于对整个URL进行编码
编码:
eg:encodeURIComponent('http://www..com?name=zhang@xiao@jie&order=1')
res:"http%3A%2F% 2Fwww..com%3Fname%3Dzhang%40xiao%40jie%26order%3D1 "
解码:
eg:decodeURIComponent("http%3A%2F% 2Fwww..com%3Fname%3Dzhang%40xiao%40jie%26order%3D1 ")
res:" http://www..com?name=zhang@xiao@jie&order=1 "
‘柒’ Web前端新手应该知道的JavaScript开发技巧有哪些
今天小编要跟大家分享的文章是关于Web前端新手应该知道的JavaScript开发技巧有哪些?熟悉Web前端的小伙伴都知道,Javascript
的很多扩展的特性是的它变得更加的犀利,同时也给予程序员机会创建更漂亮并且更让用户喜欢的网站。
尽管很多的开发人员都乐于颂扬javascript,但是仍旧有人看到它的阴暗面。
使用很多javascript代码的Web页面会加载很慢,过多的使用javascript使得网页丑陋和拖沓。很快如何有效地使用
javascript成为一个非常火热的话题。
今天小编就为Web前端新手准备了这篇JavaScript开发技巧,希望能够对你有所帮助,下面我们一起来看一看吧!
1、尽可能的保持代码简洁
可能大家都听到过了N遍这个代码简洁问题了。作为一个开发人员你可能在你的代码开发过程中使用了很多次,但千万不要在js开发中忘记这点。
§尽量在开发模式中添加注释和空格,这样保持代码的可读性
§在发布到产品环境前请将空格和注释都删除,并且尽量缩写变量和方法名
§使用第三方工具帮助你实现压缩javascript。
2、思考后再修改prototypes
添加新的属性到对象prototype中是导致脚本出错的常见原因。
yourObject.prototype.anotherFunction='Hello'
yourObject.prototype.anotherMethod=function(){...}
在上面代码中,所有的变量都会被影响,因为他们都继承于yourObject。这样的使用会导致意想不到的行为。所以建议在使用完后删除类似的修改。
yourObject.prototype.anotherFunction='Hello'
yourObject.prototype.anotherMethod=function(){};
test.anotherMethod();
deleteyourObject.prototype.anotherFunction='Hello'
deleteyourObject.prototype.anotherMethod=function(){};
3、DebugJavascript代码
即使最好的开发人员都会犯错。为了最大化的减少类似错误,请在你的debugger中运行你的代码,确认你没有遇到任何细微的错误。
4、避免Eval
你的JS在没有eval方法的时候也可以很好的工作。eval允许访问javascript编译器。如果一个字符串作为参数传递到
eval,那么它的结果可以被执行。
这会很大的降低代码的性能。尽量避免在产品环境中使用eval。
5、最小化DOM访问
DOM是最复杂的API,会使得代码执行过程变慢。有时候Web页面可能没有加载或者加载不完整。最好避免DOM。
6、在使用javascript类库之前先学习javascript
互联网充斥着很多的javascript类库,很多程序员都往往使用js类库而不理解负面影响。强烈建议你在使用第三方类库之前学习基本的JS
代码,否则,你就准备着倒霉吧。
7、不要用“SetTimeOut”和“Setinterval”方法来作为“Eval”的备选
setTimeOut("document.getID('value')",3000);
在以上代码中document.getID(‘value’)在setTimeOut方法中被作为字符串来处理。这类似于eval
方法,在每个代码执行中来执行一个字符串,因此会降低性能,因此,建议在这些方法中传递一个方法。
setTimeOut(yourFunction,3000);
8、[]比newArray();更好
一个常犯的错误在于使用当需要数组的时候使用一个对象或者该使用对象的时候使用一个数组。但是使用原则很简单:
“当属性名称是小的连续整数,你应该使用数组。否则,使用一个对象”_DouglasCrockford,JavaScript:Good
Parts的作者.
建议:
vara=[ƇA',ƈB'];
避免:
vara=newArray();
a[0]="1A";
a[1]="2B";
9、尽量不要多次使用var
在初始每一个变量的时候,程序员都习惯使用var关键字。相反,建议你使用逗号来避免多余的关键字,并且减少代码体积。如下:
varvariableOne='string1',
variableTwo='string2',
variableThree='string3'
10、不要忽略分号“;”
这往往是大家花费数个小时进行debug的原因之一。
我很确信你肯定也在其它的文章中阅读过以上相关的内容,但是大家可能往往都忽略了很多基本的规则。你是不是也曾经忽略过分号。是不是也遇到过eval
关键字问题导致性能问题?
以上就是小编今天为大家分享的关于Web前端新手应该知道的JavaScript
开发技巧有哪些?的文章,希望本篇文章能够对刚刚接触Web前端行业的新手们有所帮助。想要了解更多Web前端知识记得关注北大青鸟Web前端培训官网!
*声明:内容与图片均来源于网络(部分内容有修改),版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
‘捌’ 亚马逊广告词和关键词的区别
亚马逊广告词起到搜索的作用,关键词起到最大限度地曝光。亚马逊广告推荐Jungle Scout,Jungle Scout是第一个亚马逊研究产品的工具,每年协助亚马逊卖家实现400亿美元营业额,非常好用。
JungleScout是全球领先的国际电商数据分析工具,目前已经发展成为全球60万亚马逊卖家正在使用的国际电商的生意参谋SaaS工具——集数据化选品、市场趋势调研、供应链功能、关键词搜索及反查、Listing优化、自动化邀评、店铺利润分析为一体,为卖家提供从选品到运营的一站式服务。
想要了解更多有关数据分析的相关信息,推荐咨询Jungle Scout。Jungle Scout倡导数据化智能选品、打造精品店铺、通过高效运营技巧和策略来获得中国品牌跨境出海成功,是亚马逊跨境电商行业的领军品牌,影响了全球超过100万亚马逊从业者;并成为全球成功卖家的首选,实力强大,值得选择。}
‘玖’ 前端为什么用private
private关键字在前端开发中使用有很多好处,首先,可以有效减少全局变量的范围,使代码模块之间的联系更加完整,减少代码中不必要的变量污染;其次,可以在类中定义私有方法,使得模块之间的操作更加安全,让代码更加稳定可靠;最后,可以使用private关键字将模块的数据与行为分离,使代码更高效,更好维护。