AMD 和 CMD 的區別有哪些?javascript
區別:前端
1. 對於依賴的模塊,AMD 是提早執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改爲能夠延遲執行(根據寫法不一樣,處理方式不一樣)。CMD 推崇 as lazy as possible.java
2. CMD 推崇依賴就近,AMD 推崇依賴前置。看代碼:angularjs
// CMD
define(function(require, exports, module) {
var a = require('./a')
a.doSomething()
// 此處略去 100 行
var b = require('./b') // 依賴能夠就近書寫
b.doSomething()
// ...
})算法
// AMD 默認推薦的是
define(['./a', './b'], function(a, b) { // 依賴必須一開始就寫好
a.doSomething()
// 此處略去 100 行
b.doSomething()
...
}) 瀏覽器
雖然 AMD 也支持 CMD 的寫法,同時還支持將 require 做爲依賴項傳遞,但 RequireJS 的做者默認是最喜歡上面的寫法,也是官方文檔裏默認的模塊定義寫法。服務器
3. AMD 的 API 默認是一個當多個用,CMD 的 API 嚴格區分,推崇職責單一。好比 AMD 裏,require 分全局 require 和局部 require,都叫 require。CMD 裏,沒有全局 require,而是根據模塊系統的完備性,提供 seajs.use 來實現模塊系統的加載啓動。CMD 裏,每一個 API 都簡單純粹。閉包
4. 還有一些細節差別,具體看這個規範的定義就好,就很少說了。mvc
MVC,MVP 和 MVVM框架
mvc
接受用戶指令時,MVC 能夠分紅兩種方式。一種是經過 View 接受指令,傳遞給 Controller。另外一種是直接經過controller接受指令。
MVP
模式將 Controller 更名爲 Presenter,同時改變了通訊方向。
1. 各部分之間的通訊,都是雙向的。
2. View 與 Model 不發生聯繫,都經過 Presenter 傳遞。
3. View 很是薄,不部署任何業務邏輯,稱爲"被動視圖"(Passive View),即沒有任何主動性,而 Presenter很是厚,全部邏輯都部署在那裏。
MVVM
模式將 Presenter 更名爲 ViewModel,基本上與 MVP 模式徹底一致。
惟一的區別是,它採用雙向綁定(data-binding):View的變更,自動反映在 ViewModel,反之亦然。Angular 和 Ember 都採用這種模式
5 JavaScript內存管理
JS中內存的分配和回收都是自動完成的,內存在不使用的時候會被垃圾回收器自動回收。
簡單的說,js是這樣管理內存的:
找出那些再也不繼續使用的變量,而後釋放其中佔用的內存。爲此,垃圾收集器會按照固定的時間間隔(或代碼執行中預設的收集時間),週期性的執行這一操做.
對垃圾回收算法來講,核心思想就是如何判斷內存已經再也不使用了。下面介紹兩種常見瀏覽器的垃圾回收算法。
1 標記清除 (主流作法)
2 引用計數法,跟蹤記錄每一個值的被引用次數。
6 JS中Null與Undefined的區別
在JavaScript中存在這樣兩種原始類型:Null與Undefined。
Undefined類型只有一個值,即undefined。當聲明的變量還未被初始化時,變量的默認值爲undefined。
Null類型也只有一個值,即null。null用來表示還沒有存在的對象,經常使用來表示函數企圖返回一個不存在的對象。
7 閉包是什麼?閉包如何避免內存循環引用。
閉包是在某個做用域內定義的函數,它能夠訪問這個做用域內的全部變量。
參考 http://blog.csdn.net/liangklfang/article/details/48543917
方法1、主動設置js對象element爲空,打破循環引用
function assignHandler()
{
var element=document.getElementById("div1");
var id=element.id;
element.onclick=function() //element的onclick引用了函數funciton,function經過閉包引用了element,照成循環引用
{
alert(id+element+sex);
}
/*閉包能夠監聽外部變量的變化,因此這裏把element=null,也就是說外部這個變量至關於不存在了,雖然賦值是在閉包後面,閉包也可以檢測到!因此匿名函數不會有外部的DOM對象的引用,不會內存泄漏*/
var sex="female";
element=null;
}
方法2、經過添加另一個閉包來避免JS對象和DOM對象之間的循環引用
window.onload=function outerFunction()
{
var anotherObj=function innerFunction()
{
alert("I have avoided the leak!");
}
//經過另一個閉包來避免JS對象和DOM對象之間的循環引用
function anotherInnerFunction()
{
var obj=document.getElementById("div1");
//DOM對象引用了anotherObj函數,可是anotherObj函數沒法引用DOM對象
obj.onclick=anotherObj;
};
anotherInnerFunction();
}
方法3、經過添加另外一個函數來避免閉包自己,進而阻止內存泄漏
window.onload=function()
{
var obj=document.getElementById("div1");
obj.onclick=doesNotLeak;
}
//該函數沒法訪問上面匿名函數中間的obj對象,從而能夠阻止內存泄漏!
function doesNotLeak()
{
alert("我已經阻止內存泄漏了!");
}
7 解釋下浮動和它的工做原理?清除浮動的技巧
浮動元素脫離文檔流,不佔據空間。
一、<div style="clear:both;"></div>
二、.clearfix:after {content:"."; display:block; height:0; visibility:hidden; clear:both; }
.clearfix { *zoom:1; } //爲了適配ie6
3,設置`overflow`爲`hidden`或者auto
8 iframe
iframe是一種框架,也是一種很常見的網頁嵌入方式,零度今天給你們分析分析它的優缺點。iframe的優勢:1.iframe可以原封不動的把嵌入的網頁展示出來。2.若是有多個網頁引用iframe,那麼你只須要修改iframe的內容,就能夠實現調用的每個頁面內容的更改,方便快捷。3.網頁若是爲了統一風格,頭部和版本都是同樣的,就能夠寫成一個頁面,用iframe來嵌套,能夠增長代碼的可重用。4.若是遇到加載緩慢的第三方內容如圖標和廣告,這些問題能夠由iframe來解決。iframe的缺點:1.會產生不少頁面,不容易管理。2.iframe框架結構有時會讓人感到迷惑,若是框架個數多的話,可能會出現上下、左右滾動條,會分散訪問者的注意力,用戶體驗度差。3.代碼複雜,沒法被一些搜索引擎索引到,這一點很關鍵,如今的搜索引擎爬蟲還不能很好的處理iframe中的內容,因此使用iframe會不利於搜索引擎優化。4.不少的移動設備(PDA 手機)沒法徹底顯示框架,設備兼容性差。5.iframe框架頁面會增長服務器的http請求,對於大型網站是不可取的。分析了這麼多,如今基本上都是用Ajax來代替iframe,因此iframe已經漸漸的退出了前端開發。求y 和 z 的值var x =1var y = 0var z = 0function add(n){n=n+1}y=add(x)function add(n){n=n+3}z=add(x)underfined