闭包就是可以读取其余函数内部变量的函数javascript
闭包是指有权访问另外一个函数做用域中变量的函数,建立闭包的最多见的方式就是在一个函数内建立另外一个函数,经过另外一个函数访问这个函数的局部变量,利用闭包能够突破做用链域css
闭包的特性:html
说说你对闭包的理解前端
使用闭包主要是为了设计私有的方法和变量。闭包的优势是能够避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易形成内存泄露。在js中,函数即闭包,只有函数才会产生做用域的概念vue
闭包 的最大用处有两个,一个是能够读取函数内部的变量,另外一个就是让这些变量始终保持在内存中java
闭包的另外一个用处,是封装对象的私有属性和私有方法react
好处:可以实现封装和缓存等;jquery
使用闭包的注意点webpack
window
对象即被终止,做用域链向下访问变量是不被容许的prototype
(原型),当咱们访问一个对象的属性时prototype
里找这个属性,这个prototype
又会有本身的prototype
,因而就这样一直找下去,也就是咱们平时所说的原型链的概念instance.constructor.prototype = instance.__proto__
特色:git
JavaScript
对象是经过引用来传递的,咱们建立的每一个新对象实体中并无一份属于本身的原型副本。当咱们修改原型时,与之相关的对象也会继承这一改变当咱们须要一个属性的时,Javascript
引擎会先看当前对象中是否有这个属性, 若是没有的
Prototype
对象是否有这个属性,如此递推下去,一直检索到 Object
内建对象Event Delegation
),又称之为事件委托。是 JavaScript
中经常使用绑定事件的经常使用技巧。顾名思义,“事件代理”便是把本来须要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是能够提升性能table
上代理全部td
的click
事件就很是棒拷贝继承
原型prototype
机制或apply
和call
方法去实现较简单,建议使用构造函数与原型混合方式
1 |
function Parent(){ |
this
老是指向函数的直接调用者(而非间接调用者)new
关键字,this
指向new
出来的那个对象this
指向触发这个事件的对象,特殊的是,IE
中的attachEvent
中的this
老是指向全局对象Window
W3C
中定义事件的发生经历三个阶段:捕获阶段(capturing
)、目标阶段(targetin
)、冒泡阶段(bubbling
)
DOM
事件流:同时支持两种事件模型:捕获型事件和冒泡型事件W3c
中,使用stopPropagation()
方法;在IE下设置cancelBubble = true
click - <a>
后的跳转。在W3c
中,使用preventDefault()
方法,在IE
下设置window.event.returnValue = false
this
变量引用该对象,同时还继承了该函数的原型this
引用的对象中this
所引用,而且最后隐式的返回 this
Ajax
的原理简单来讲是在用户和服务器之间加了—个中间层(AJAX
引擎),经过XmlHttpRequest
对象来向服务器发异步请求,从服务器得到数据,而后用javascrip
t来操做DOM
而更新页面。使用户操做与服务器响应异步化。这其中最关键的一步就是从服务器得到请求数据Ajax
的过程只涉及JavaScript
、XMLHttpRequest
和DOM
。XMLHttpRequest
是aja
x的核心机制 1 |
// 1. 建立链接 |
ajax 有那些优缺点?
Ajax
在客户端运行,承担了一部分原本由服务器承担的工做,减小了大用户量下的服务器负载。Ajax
能够实现动态不刷新(局部刷新)AJAX
暴露了与服务器交互的细节。jsonp
、 iframe
、window.name
、window.postMessage
、服务器上设置代理页面 1 |
var module1 = (function(){ |
IE
async
:script
,插入到DOM
中,加载完毕后callBack
setTimeout
的第一个参数使用字符串而非函数的话,会引起内存泄漏数据体积方面
JSON
相对于XML
来说,数据的体积小,传递的速度更快些。数据交互方面
JSON
与JavaScript
的交互更加方便,更容易解析处理,更好的数据交互数据描述方面
JSON
对数据的描述性比XML
较差传输速度方面
JSON
的速度要远远快于XML
WebPack
是一个模块打包工具,你可使用WebPack
管理你的模块依赖,并编绎输出模块们所需的静态文件。它可以很好地管理、打包Web
开发中所用到的HTML
、Javascript
、CSS
以及各类静态文件(图片、字体等),让开发过程更加高效。对于不一样类型的资源,webpack
有对应的模块加载器。webpack
模块打包器会分析模块间的依赖关系,最后 生成了优化且合并后的静态资源CommonJS
是服务器端模块的规范,Node.js
采用了这个规范。CommonJS
规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操做。AMD
规范则是非同步加载模块,容许指定回调函数AMD
推荐的风格经过返回一个对象作为模块对象,CommonJS
的风格经过对module.exports
或exports
的属性赋值来达到暴露模块对象的目的sql
注入原理
SQL
命令插入到Web
表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令总的来讲有如下几点
"-"
进行转换等SQL
或者直接使用存储过程进行数据查询存取hash
掉密码和敏感的信息XSS原理及防范
Xss(cross-site scripting)
攻击指的是攻击者往Web
页面里插入恶意html
标签或者javascript
代码。好比:攻击者在论坛中放一个看似安全的连接,骗取用户点击后,窃取cookie
中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户本来觉得的信任站点XSS防范方法
”<”,”>”,”;”,”’”
等字符作过滤;其次任何内容写到页面以前都必须加以encode,避免不当心把html tag
弄出来。这一个层面作好,至少能够堵住超过一半的XSS 攻击XSS与CSRF有什么区别吗?
XSS
是获取信息,不须要提早知道其余用户页面的代码和数据包。CSRF
是代替用户完成指定的动做,须要知道其余用户页面的代码和数据包。要完成一次CSRF
攻击,受害者必须依次完成两个步骤
登陆受信任网站A
,并在本地生成Cookie
A
的状况下,访问危险网站B
CSRF的防护
CSRF
方式方法不少样,但总的思想都是一致的,就是在客户端页面增长伪随机数工厂模式:
new
关键字构造函数模式
this
对象;Iframe
把真正的银行登陆页面嵌到他的页面上,当你使用真实的用户名,密码登陆时,他的页面就能够经过Javascript
读取到你的表单中input
中的内容,这样用户名,密码就轻松到手了。offsetWidth/offsetHeight
返回值包含content + padding + border,效果与e.getBoundingClientRect()相同clientWidth/clientHeight
返回值只包含content + padding,若是有滚动条,也不包含滚动条scrollWidth/scrollHeight
返回值包含content + padding + 溢出内容的尺寸var obj = {};
var obj = new Object();
var obj = Object.create(Object.prototype);
png24
位的图片在iE6浏览器上出现背景,解决方案是作成PNG8
margin
和padding
不一样。解决方案是加一个全局的*{margin:0;padding:0;}
来统一,,可是全局效率很低,通常是以下这样解决: 1 |
body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{ |
IE
下,event
对象有x
,y
属性,可是没有pageX
,pageY
属性Firefox
下,event
对象有pageX
,pageY
属性,可是没有x,y
属性.依照 Promise/A+
的定义,Promise
有四种状态:
pending:
初始状态, 非 fulfilled
或 rejected.
fulfilled:
成功的操做.
rejected:
失败的操做.
settled: Promise
已被fulfilled
或rejected
,且不是pending
另外, fulfilled
与 rejected
一块儿合称 settled
Promise
对象用来进行延迟(deferred
) 和异步(asynchronous
) 计算Promise 的构造函数
Promise
,最基本的用法以下: 1 |
var promise = new Promise(function(resolve, reject) { |
Promise
实例拥有 then
方法(具备 then
方法的对象,一般被称为thenable
)。它的使用方法以下:
1 |
promise.then(onFulfilled, onRejected) |
接收两个函数做为参数,一个在 fulfilled
的时候被调用,一个在rejected
的时候被调用,接收参数就是 future
,onFulfilled
对应resolve
, onRejected
对应 reject
jquery
源码封装在一个匿名函数的自执行环境中,有助于防止变量的全局污染,而后经过传入window
对象参数,可使window
对象做为局部变量使用,好处是当jquery
中访问window
对象的时候,就不用将做用域链退回到顶层做用域了,从而能够更快的访问window对象。一样,传入undefined
参数,能够缩短查找undefined
时的做用域链jquery
将一些原型属性和方法封装在了jquery.prototype
中,为了缩短名称,又赋值给了jquery.fn
,这是很形象的写法jQuery
将其保存为局部变量以提升访问速度jquery
实现的链式调用能够节约代码,所返回的都是同一个对象,能够提升代码效率Vue.js
一个用于建立 web
交互界面的库,是一个精简的 MVVM
。它经过双向数据绑定把 View
层和 Model
层链接了起来。实际的 DOM
封装和输出格式都被抽象为了Directives
和 Filters
AngularJS
是一个比较完善的前端MVVM
框架,包含模板,数据双向绑定,路由,模块化,服务,依赖注入等全部功能,模板功能强大丰富,自带了丰富的 Angular
指令
react
React
仅仅是 VIEW
层是facebook
公司。推出的一个用于构建UI
的一个库,可以实现服务器端的渲染。用了virtual dom
,因此性能很好。
特色:
Javascript
运行环境Chrome V8
引擎进行代码解释I/O
优势:
缺点:
核CPU
,不能充分利用CPU
CommonJS
是服务器端模块的规范,Node.js
采用了这个规范。CommonJS
规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操做。AMD
规范则是非同步加载模块,容许指定回调函数
AMD
推荐的风格经过返回一个对象作为模块对象,CommonJS
的风格经过对module.exports
或exports
的属性赋值来达到暴露模块对象的目的
setTimeout
的第一个参数使用字符串而非函数的话,会引起内存泄漏cookie
session
url
重写input
ip
地址Undefined
、Null
、Boolean
、Number
、String
Object
是 JavaScript
中全部对象的父对象Object
、Array
、Boolean
、Number
和 String
Function
、Arguments
、Math
、Date
、RegExp
、Error
===/!==
来比较true/false
或者数值new Array
这种形式Switch
语句必须带有default
分支If
语句必须使用大括号for-in
循环中的变量 应该使用var
关键字明确限定做用域,从而避免做用域污Undefined
,Null
,Boolean
,Numbe
r、String
)stack
)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,因此放入栈中存储;heap
)中的对象,占据空间大、大小不固定,若是存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其
javascript
建立对象简单的说,无非就是使用内置对象或各类自定义对象,固然还能够用JSON
;但写法有不少种,也能混合使用
1 |
person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"}; |
function
来模拟无参的构造函数 1 |
function Person(){} |
function
来模拟参构造函数来实现(用this
关键字定义构造的上下文属性) 1 |
function Pet(name,age,hobby){ |
1 |
var wcDog =new Object(); |
1 |
function Dog(){ |
1 |
function Car(name,price){ |
JS
代码并运行eval
,不安全,很是耗性能(2
次,一次解析成js
语句,一次执行)JSON
字符串转换为JSON对象的时候能够用eval,var obj =eval('('+ str +')')
undefined
表示不存在这个值。undefined
:是一个表示”无”的原始值或者说表示”缺乏值”,就是此处应该有一个值,可是尚未定义。当尝试读取时会返回 undefined
例如变量被声明了,但没有赋值时,就等于undefined
null
表示一个对象被定义了,值为“空值”
null
: 是一个对象(空对象, 没有任何属性和方法)例如做为函数的参数,表示该函数的参数不是对象;
在验证null
时,必定要使用 ===
,由于 ==
没法分别null
和 undefined
[1, NaN, NaN]
由于 parseInt
须要两个参数 (val, radix)
,其中radix
表示解析时用的基数。map
传了 3
个(element, index, array)
,对应的 radix
不合法致使解析失败。use strict
是一种ECMAscript 5
添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,使JS
编码更加规范化的模式,消除Javascript
语法的一些不合理、不严谨之处,减小一些怪异行为JSON(JavaScript Object Notation)
是一种轻量级的数据交换格式它是基于JavaScript
的一个子集。数据格式简单, 易于读写, 占用带宽小
JSON
字符串转换为JSON对象:
1 |
var obj =eval('('+ str +')'); |
JSON
对象转换为JSON字符串: 1 |
var last=obj.toJSONString(); |
defer
和async
、动态建立DOM
方式(用得最多)、按需异步载入js
渐进加强 :针对低版本浏览器进行构建页面,保证最基本的功能,而后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 :一开始就构建完整的功能,而后再针对低版本浏览器进行兼容
defer
并行加载js
文件,会按照页面上script
标签的顺序执行async
并行加载js
文件,下载完成当即执行,不会按照页面上script
标签的顺序执行with
语句this
指向全局对象attribute
是dom
元素在文档中做为html
标签拥有的属性;property
就是dom
元素在js
中做为对象拥有的属性。html
的标准属性来讲,attribute
和property
是同步的,是会自动更新的JavaScript
提供了简单的字符串插值功能)for-of
(用来遍历数据—例如数组中的值。)arguments
对象可被不定参数和默认参数完美代替。ES6
将promise
对象归入规范,提供了原生的Promise
对象。let
和const
命令,用来声明变量。let
命令实际上就增长了块级做用域。module
模块的概念OOP
基础的人更快上手js
,至少是一个官方的实现了js
的人来讲,这个东西没啥大影响;一个Object.creat()
搞定继承,比class
简洁清晰的多 1 |
// event(事件)工具集,来源:github.com/markyun |
1 |
function isArray(arg) { |
1 |
var arr = [3, 1, 4, 6, 5, 7, 2]; |
1 |
var arr = [3, 1, 4, 6, 5, 7, 2]; |
1 |
function GetBytes(str){ |
bind
的做用与call
和apply
相同,区别是call
和apply
是当即调用函数,而bind
是返回了一个函数,须要调用的时候再执行。bind
函数实现以下 1 |
Function.prototype.bind = function(ctx) { |
对于传统的网站来讲重构一般是:
表格(table
)布局改成DIV+CSS
使网站前端兼容于现代浏览器(针对于不合规范的CSS
、如对IE6有效的)
对于移动平台的优化
针对于SEO
进行优化
前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近
前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,
与团队成员,UI
设计,产品经理的沟通;
作好的页面结构,页面重构和用户体验;
为简化用户使用提供技术支持(交互部分)
为多个浏览器兼容性提供支持
为提升用户浏览速度(浏览器性能)提供支持
为跨平台或者其余基于webkit或其余渲染引擎的应用提供支持
为展现数据提供支持(数据接口)
先期团队必须肯定好全局样式(globe.css
),编码模式(utf-8
) 等;
编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);
标注样式编写人,各模块都及时标注(标注关键样式调用的地方);
页面进行标注(例如 页面 模块 开始和结束);
CSS
跟HTML
分文件夹并行存放,命名都得统一(例如style.css
);
JS
分文件夹存放 命名以该JS
功能为准的英文翻译。
图片采用整合的 images.png png8
格式文件使用 - 尽可能整合在一块儿使用方便未来的管理
闭包就是可以读取其余函数内部变量的函数
闭包是指有权访问另外一个函数做用域中变量的函数,建立闭包的最多见的方式就是在一个函数内建立另外一个函数,经过另外一个函数访问这个函数的局部变量,利用闭包能够突破做用链域
闭包的特性:
说说你对闭包的理解
使用闭包主要是为了设计私有的方法和变量。闭包的优势是能够避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易形成内存泄露。在js中,函数即闭包,只有函数才会产生做用域的概念
闭包 的最大用处有两个,一个是能够读取函数内部的变量,另外一个就是让这些变量始终保持在内存中
闭包的另外一个用处,是封装对象的私有属性和私有方法
好处:可以实现封装和缓存等;
使用闭包的注意点
window
对象即被终止,做用域链向下访问变量是不被容许的prototype
(原型),当咱们访问一个对象的属性时prototype
里找这个属性,这个prototype
又会有本身的prototype
,因而就这样一直找下去,也就是咱们平时所说的原型链的概念instance.constructor.prototype = instance.__proto__
特色:
JavaScript
对象是经过引用来传递的,咱们建立的每一个新对象实体中并无一份属于本身的原型副本。当咱们修改原型时,与之相关的对象也会继承这一改变当咱们须要一个属性的时,Javascript
引擎会先看当前对象中是否有这个属性, 若是没有的
Prototype
对象是否有这个属性,如此递推下去,一直检索到 Object
内建对象Event Delegation
),又称之为事件委托。是 JavaScript
中经常使用绑定事件的经常使用技巧。顾名思义,“事件代理”便是把本来须要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是能够提升性能table
上代理全部td
的click
事件就很是棒拷贝继承
原型prototype
机制或apply
和call
方法去实现较简单,建议使用构造函数与原型混合方式
1 |
function Parent(){ |
this
老是指向函数的直接调用者(而非间接调用者)new
关键字,this
指向new
出来的那个对象this
指向触发这个事件的对象,特殊的是,IE
中的attachEvent
中的this
老是指向全局对象Window
W3C
中定义事件的发生经历三个阶段:捕获阶段(capturing
)、目标阶段(targetin
)、冒泡阶段(bubbling
)
DOM
事件流:同时支持两种事件模型:捕获型事件和冒泡型事件W3c
中,使用stopPropagation()
方法;在IE下设置cancelBubble = true
click - <a>
后的跳转。在W3c
中,使用preventDefault()
方法,在IE
下设置window.event.returnValue = false
this
变量引用该对象,同时还继承了该函数的原型this
引用的对象中this
所引用,而且最后隐式的返回 this
Ajax
的原理简单来讲是在用户和服务器之间加了—个中间层(AJAX
引擎),经过XmlHttpRequest
对象来向服务器发异步请求,从服务器得到数据,而后用javascrip
t来操做DOM
而更新页面。使用户操做与服务器响应异步化。这其中最关键的一步就是从服务器得到请求数据Ajax
的过程只涉及JavaScript
、XMLHttpRequest
和DOM
。XMLHttpRequest
是aja
x的核心机制 1 |
// 1. 建立链接 |
ajax 有那些优缺点?
Ajax
在客户端运行,承担了一部分原本由服务器承担的工做,减小了大用户量下的服务器负载。Ajax
能够实现动态不刷新(局部刷新)AJAX
暴露了与服务器交互的细节。jsonp
、 iframe
、window.name
、window.postMessage
、服务器上设置代理页面 1 |
var module1 = (function(){ |
IE
async
:script
,插入到DOM
中,加载完毕后callBack
setTimeout
的第一个参数使用字符串而非函数的话,会引起内存泄漏数据体积方面
JSON
相对于XML
来说,数据的体积小,传递的速度更快些。数据交互方面
JSON
与JavaScript
的交互更加方便,更容易解析处理,更好的数据交互数据描述方面
JSON
对数据的描述性比XML
较差传输速度方面
JSON
的速度要远远快于XML
WebPack
是一个模块打包工具,你可使用WebPack
管理你的模块依赖,并编绎输出模块们所需的静态文件。它可以很好地管理、打包Web
开发中所用到的HTML
、Javascript
、CSS
以及各类静态文件(图片、字体等),让开发过程更加高效。对于不一样类型的资源,webpack
有对应的模块加载器。webpack
模块打包器会分析模块间的依赖关系,最后 生成了优化且合并后的静态资源CommonJS
是服务器端模块的规范,Node.js
采用了这个规范。CommonJS
规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操做。AMD
规范则是非同步加载模块,容许指定回调函数AMD
推荐的风格经过返回一个对象作为模块对象,CommonJS
的风格经过对module.exports
或exports
的属性赋值来达到暴露模块对象的目的sql
注入原理
SQL
命令插入到Web
表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令总的来讲有如下几点
"-"
进行转换等SQL
或者直接使用存储过程进行数据查询存取hash
掉密码和敏感的信息XSS原理及防范
Xss(cross-site scripting)
攻击指的是攻击者往Web
页面里插入恶意html
标签或者javascript
代码。好比:攻击者在论坛中放一个看似安全的连接,骗取用户点击后,窃取cookie
中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户本来觉得的信任站点XSS防范方法
”<”,”>”,”;”,”’”
等字符作过滤;其次任何内容写到页面以前都必须加以encode,避免不当心把html tag
弄出来。这一个层面作好,至少能够堵住超过一半的XSS 攻击XSS与CSRF有什么区别吗?
XSS
是获取信息,不须要提早知道其余用户页面的代码和数据包。CSRF
是代替用户完成指定的动做,须要知道其余用户页面的代码和数据包。要完成一次CSRF
攻击,受害者必须依次完成两个步骤
登陆受信任网站A
,并在本地生成Cookie
A
的状况下,访问危险网站B
CSRF的防护
CSRF
方式方法不少样,但总的思想都是一致的,就是在客户端页面增长伪随机数工厂模式:
new
关键字构造函数模式
this
对象;Iframe
把真正的银行登陆页面嵌到他的页面上,当你使用真实的用户名,密码登陆时,他的页面就能够经过Javascript
读取到你的表单中input
中的内容,这样用户名,密码就轻松到手了。offsetWidth/offsetHeight
返回值包含content + padding + border,效果与e.getBoundingClientRect()相同clientWidth/clientHeight
返回值只包含content + padding,若是有滚动条,也不包含滚动条scrollWidth/scrollHeight
返回值包含content + padding + 溢出内容的尺寸var obj = {};
var obj = new Object();
var obj = Object.create(Object.prototype);
png24
位的图片在iE6浏览器上出现背景,解决方案是作成PNG8
margin
和padding
不一样。解决方案是加一个全局的*{margin:0;padding:0;}
来统一,,可是全局效率很低,通常是以下这样解决: 1 |
body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{ |
IE
下,event
对象有x
,y
属性,可是没有pageX
,pageY
属性Firefox
下,event
对象有pageX
,pageY
属性,可是没有x,y
属性.依照 Promise/A+
的定义,Promise
有四种状态:
pending:
初始状态, 非 fulfilled
或 rejected.
fulfilled:
成功的操做.
rejected:
失败的操做.
settled: Promise
已被fulfilled
或rejected
,且不是pending
另外, fulfilled
与 rejected
一块儿合称 settled
Promise
对象用来进行延迟(deferred
) 和异步(asynchronous
) 计算Promise 的构造函数
Promise
,最基本的用法以下: 1 |
var promise = new Promise(function(resolve, reject) { |
Promise
实例拥有 then
方法(具备 then
方法的对象,一般被称为thenable
)。它的使用方法以下:
1 |
promise.then(onFulfilled, onRejected) |
接收两个函数做为参数,一个在 fulfilled
的时候被调用,一个在rejected
的时候被调用,接收参数就是 future
,onFulfilled
对应resolve
, onRejected
对应 reject
jquery
源码封装在一个匿名函数的自执行环境中,有助于防止变量的全局污染,而后经过传入window
对象参数,可使window
对象做为局部变量使用,好处是当jquery
中访问window
对象的时候,就不用将做用域链退回到顶层做用域了,从而能够更快的访问window对象。一样,传入undefined
参数,能够缩短查找undefined
时的做用域链jquery
将一些原型属性和方法封装在了jquery.prototype
中,为了缩短名称,又赋值给了jquery.fn
,这是很形象的写法jQuery
将其保存为局部变量以提升访问速度jquery
实现的链式调用能够节约代码,所返回的都是同一个对象,能够提升代码效率Vue.js
一个用于建立 web
交互界面的库,是一个精简的 MVVM
。它经过双向数据绑定把 View
层和 Model
层链接了起来。实际的 DOM
封装和输出格式都被抽象为了Directives
和 Filters
AngularJS
是一个比较完善的前端MVVM
框架,包含模板,数据双向绑定,路由,模块化,服务,依赖注入等全部功能,模板功能强大丰富,自带了丰富的 Angular
指令
react
React
仅仅是 VIEW
层是facebook
公司。推出的一个用于构建UI
的一个库,可以实现服务器端的渲染。用了virtual dom
,因此性能很好。
特色:
Javascript
运行环境Chrome V8
引擎进行代码解释I/O
优势:
缺点:
核CPU
,不能充分利用CPU
CommonJS
是服务器端模块的规范,Node.js
采用了这个规范。CommonJS
规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操做。AMD
规范则是非同步加载模块,容许指定回调函数
AMD
推荐的风格经过返回一个对象作为模块对象,CommonJS
的风格经过对module.exports
或exports
的属性赋值来达到暴露模块对象的目的
setTimeout
的第一个参数使用字符串而非函数的话,会引起内存泄漏cookie
session
url
重写input
ip
地址Undefined
、Null
、Boolean
、Number
、String
Object
是 JavaScript
中全部对象的父对象Object
、Array
、Boolean
、Number
和 String
Function
、Arguments
、Math
、Date
、RegExp
、Error
===/!==
来比较true/false
或者数值new Array
这种形式Switch
语句必须带有default
分支If
语句必须使用大括号for-in
循环中的变量 应该使用var
关键字明确限定做用域,从而避免做用域污Undefined
,Null
,Boolean
,Numbe
r、String
)stack
)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,因此放入栈中存储;heap
)中的对象,占据空间大、大小不固定,若是存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其
javascript
建立对象简单的说,无非就是使用内置对象或各类自定义对象,固然还能够用JSON
;但写法有不少种,也能混合使用
1 |
person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"}; |
function
来模拟无参的构造函数 1 |
function Person(){} |
function
来模拟参构造函数来实现(用this
关键字定义构造的上下文属性) 1 |
function Pet(name,age,hobby){ |
1 |
var wcDog =new Object(); |
1 |
function Dog(){ |
1 |
function Car(name,price){ |
JS
代码并运行eval
,不安全,很是耗性能(2
次,一次解析成js
语句,一次执行)JSON
字符串转换为JSON对象的时候能够用eval,var obj =eval('('+ str +')')
undefined
表示不存在这个值。undefined
:是一个表示”无”的原始值或者说表示”缺乏值”,就是此处应该有一个值,可是尚未定义。当尝试读取时会返回 undefined
例如变量被声明了,但没有赋值时,就等于undefined
null
表示一个对象被定义了,值为“空值”
null
: 是一个对象(空对象, 没有任何属性和方法)例如做为函数的参数,表示该函数的参数不是对象;
在验证null
时,必定要使用 ===
,由于 ==
没法分别null
和 undefined
[1, NaN, NaN]
由于 parseInt
须要两个参数 (val, radix)
,其中radix
表示解析时用的基数。map
传了 3
个(element, index, array)
,对应的 radix
不合法致使解析失败。use strict
是一种ECMAscript 5
添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,使JS
编码更加规范化的模式,消除Javascript
语法的一些不合理、不严谨之处,减小一些怪异行为JSON(JavaScript Object Notation)
是一种轻量级的数据交换格式它是基于JavaScript
的一个子集。数据格式简单, 易于读写, 占用带宽小
JSON
字符串转换为JSON对象:
1 |
var obj =eval('('+ str +')'); |
JSON
对象转换为JSON字符串: 1 |
var last=obj.toJSONString(); |
defer
和async
、动态建立DOM
方式(用得最多)、按需异步载入js
渐进加强 :针对低版本浏览器进行构建页面,保证最基本的功能,而后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。
优雅降级 :一开始就构建完整的功能,而后再针对低版本浏览器进行兼容
defer
并行加载js
文件,会按照页面上script
标签的顺序执行async
并行加载js
文件,下载完成当即执行,不会按照页面上script
标签的顺序执行with
语句this
指向全局对象attribute
是dom
元素在文档中做为html
标签拥有的属性;property
就是dom
元素在js
中做为对象拥有的属性。html
的标准属性来讲,attribute
和property
是同步的,是会自动更新的JavaScript
提供了简单的字符串插值功能)for-of
(用来遍历数据—例如数组中的值。)arguments
对象可被不定参数和默认参数完美代替。ES6
将promise
对象归入规范,提供了原生的Promise
对象。let
和const
命令,用来声明变量。let
命令实际上就增长了块级做用域。module
模块的概念OOP
基础的人更快上手js
,至少是一个官方的实现了js
的人来讲,这个东西没啥大影响;一个Object.creat()
搞定继承,比class
简洁清晰的多 1 |
// event(事件)工具集,来源:github.com/markyun |
1 |
function isArray(arg) { |
1 |
var arr = [3, 1, 4, 6, 5, 7, 2]; |
1 |
var arr = [3, 1, 4, 6, 5, 7, 2]; |
1 |
function GetBytes(str){ |
bind
的做用与call
和apply
相同,区别是call
和apply
是当即调用函数,而bind
是返回了一个函数,须要调用的时候再执行。bind
函数实现以下 1 |
Function.prototype.bind = function(ctx) { |
对于传统的网站来讲重构一般是:
表格(table
)布局改成DIV+CSS
使网站前端兼容于现代浏览器(针对于不合规范的CSS
、如对IE6有效的)
对于移动平台的优化
针对于SEO
进行优化
前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近
前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,
与团队成员,UI
设计,产品经理的沟通;
作好的页面结构,页面重构和用户体验;
为简化用户使用提供技术支持(交互部分)
为多个浏览器兼容性提供支持
为提升用户浏览速度(浏览器性能)提供支持
为跨平台或者其余基于webkit或其余渲染引擎的应用提供支持
为展现数据提供支持(数据接口)
先期团队必须肯定好全局样式(globe.css
),编码模式(utf-8
) 等;
编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);
标注样式编写人,各模块都及时标注(标注关键样式调用的地方);
页面进行标注(例如 页面 模块 开始和结束);
CSS
跟HTML
分文件夹并行存放,命名都得统一(例如style.css
);
JS
分文件夹存放 命名以该JS
功能为准的英文翻译。
图片采用整合的 images.png png8
格式文件使用 - 尽可能整合在一块儿使用方便未来的管理