造成原理:
嵌套函数被返回,被外部的变量引用,或者做为外部对象的属性时,形
成闭包。 造成闭包以后,本来应该已经被垃圾回收的变量,都能继续使用。
优缺点:
1.保护函数内的变量安全,增强了封装性
2.在内存中维持一个变量(用的太多就变成了缺点,占内存)
缘由:
1.在闭包的做用域链中引用了html元素未释放内存
2.出现了循环引用javascript
如何呈现:
1,HTML文档加载后生成DOM树(包括display:none;元素);
2,在DOM树的基础上配合css样式结构体生成render树(不包含display:none;、head节点,包含visibility:hidden;节点),即页面中的占位肯定了,最后绘制页面(也叫渲染),不会改变页面布局的一些属性:color、背景色等。css
重绘(repaint):
更新页面元素的属性引发的,如颜色、透明度等不会改变页面布局而须要从新渲染的。
回流(reflow)
render树中部分或所有元素的尺寸、布局、隐藏等(内容、结构、位置)改变引发的。每一个页面至少有一次回流(即初始构建页面时),成本较高。html
数据类型:
Number,字符串,布尔值,null,undefined,Symbol。数组,对象(这俩不知道算不算)
区别:
一、var
var定义全局变量和局部变量,也能够省略var,并且在非严格模式下不会报错,可是实际上在严格模式下,二者的使用有没有区别,可能不少人不清楚。例如循环,跳出循环依旧会有效,不报错。
二、let
let拥有块级做用域,一个{}就是一个做用域,也就是let声明块级变量,即局部变量;
let在其做用域下面不存在变量提高;
let在其做用域中不能被重复声明(函数做用域和块级做用域)。
三、const
const用来声明常量,一旦声明,其值就不能够更改,并且必须初始化。若是你非得修改变量的值,js不会报错,只是默默表示失败(不起做用)。前端
4,JavaScript之面向对象的属性和特性?
对象的本质:
无序属性的集合,其属性能够包含基本值、对象或者函数。即对象是一组没有特定顺序的值,对象的每一个属性或方法都有一个名字,而这个名字都映射到一个值。故对象的本质是一个散列表:其中是一组名值对,值能够是数据或函数。
对象包含:数据属性和访问器属性,他们的区别以下:
数据属性:通常用于存储数据数值,访问器属性不包含数据值;
访问器属性:多用于get/set操做,访问器属性不能直接定义,必须使用Object.defineProperty()来定义,且该属性具备set和ger特性。console对象的时候可看。vue
Vue.js的特性以下:
1.轻量级的框架 2.双向数据绑定 3.指令 4.插件化java
优势:jquery
angular:
1良好的应用程序结构 2.双向数据绑定 3.指令 4.HTML模板 5.可嵌入、注入和测试
优势:
1.模板功能强大丰富,自带了极其丰富的angular指令。
2.是一个比较完善的前端框架,包含服务,模板,数据双向绑定,模块化,路由,过滤器,依赖注入等全部功能;
3.自定义指令,自定义指令后能够在项目中屡次使用。
4.ng模块化比较大胆的引入了Java的一些东西(依赖注入),可以很容易的写出可复用的代码,对于敏捷开发的团队来讲很是有帮助。
5.angularjs是互联网巨人谷歌开发,这也意味着他有一个坚实的基础和社区支持。angularjs
缺点:api
React特性以下:
1.声明式设计:React采用声明范式,能够轻松描述应用。
2.高效:React经过对DOM的模拟,最大限度地减小与DOM的交互。
3.灵活:React能够与已知的库或框架很好地配合。数组
优势:
6,对比一下jquery和vuejs
jquery:对HTML的操做。绑定事件。请求数据。更可能是以事件为入口去处理HTML。操做细腻。不过维护起来累
vuejs:逻辑简单,代码量少,组件化。根据页面的功能定义,构造出属于它的数据。须要事件触发,再编写起方法。方法是基本是数据的处理。
冒泡排序,js 利用sort进行排序,快速排序,希尔排序,插入排序。这个本身去理解,我写一个简单的。
objArr.sort(function(a,b){return a>b?1:-1});//从小到大排序
objArr.sort(function(a,b){return a<b?1:-1});//从大到小排序
做用域
全局做用域(Global Scope)
在代码中任何地方都能访问到的对象拥有全局做用域,
1>最外层函数和在最外层函数外面定义的变量拥有全局做用域
2>全部末定义直接赋值的变量自动声明为拥有全局做用域
3>全部window对象的属性拥有全局做用域
局部做用域
与全局做用于相反,局部做用域通常只在固定的代码片断内可访问到,最多见的例如函数内部
做用域链:
在函数执行过程当中,每遇到一个变量,都会经历一次标识符解析过程以决定从哪里获取和存储数据。该过程从做用域链头部,也就是从活动对象开始搜索,查找同名的标识符,若是找到了就使用这个标识符对应的变量,若是没找到继续搜索做用域链中的下一个对象,若是搜索完全部对象都未找到,则认为该标识符未定义。
简单来讲,就是监听dom事件,例如change,或者键盘回车,获取改变后的值,赋值给指定的职位,整个都是在函数中完成。
有的框架,基本思路是使用Object.defineProperty对数据对象作属性get和set的监听,当有数据读取和赋值操做时则调用节点的指令,这样使用最通用的=等号赋值就能够了。
权重计算
第一等:表明内联样式,如: style=””,权值为1000。
第二等:表明ID选择器,如:#content,权值为0100。
第三等:表明类,伪类和属性选择器,如.content,权值为0010。
第四等:表明类型选择器和伪元素选择器,如div p,权值为0001。
通配符、子选择器、相邻选择器等的。如*、>、+,权值为0000。
!important 能够提高权重