閉包就是可以讀取其餘函數內部變量的函數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
格式文件使用 - 儘可能整合在一塊兒使用方便未來的管理