造成原理:
嵌套函數被返回,被外部的變量引用,或者做爲外部對象的屬性時,形
成閉包。 造成閉包以後,本來應該已經被垃圾回收的變量,都能繼續使用。
優缺點:
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 能夠提高權重