js編程規范
⑴ js里有幾種編碼規范
什麼是編碼規范
編碼規范就是指導如何編寫和組織代碼的一系列標准。通過閱讀這些編碼規范,你可以知道在各個公司里代碼是如何編寫的。
我們為什麼需要編碼規范
一個主要的原因是:每個人寫代碼的方式都是不同的。我可能喜歡這么寫,而你喜歡用另一種方法寫。如果我們只處理自己的代碼,這樣並沒有什麼問題。但如果有成千上萬的程序員同時在一個代碼庫上面工作呢?如果沒有規范,事情很快會變得一團糟。代碼規范可以讓新人迅速的熟悉相關的代碼,並且也能寫出讓其他程序員簡單易懂的代碼。
Airbnb javaScript Style Guide
號稱是「最合理的編寫 JavaScript 代碼的方式」。
Airbnb 的這個代碼規范可能是互聯網最流行的 JavaScript 代碼規范了,它在 Github 上足有 6 萬 star,幾乎覆蓋了 JavaScript 的每一項特性。
Google JavaScript Style Guide
只有遵守了這里的規則,一個 JavaScript 源文件才能被稱為「Google Style」。很霸氣,我行我素,同時也被不少公司沿用。
Idiomatic JavaScript Style Guide
符合語言習慣的 JavaScript 代碼規范。
不管有多少人參與,不管是否在同一個代碼庫,所有的 JavaScript 代碼風格都必須像同一個人寫的。
另一個很強勢的同時也很流行的 JavaScript 編碼規范。它的野心也很大,不止想規范 JavaScript,其它語言也都想管起來。
地球上所有的代碼都像同一個人寫的?想想讓人覺得不寒而慄啊……
JavaScript Standard Style Guide
一個功能強大的 JavaScript 代碼規范,自帶 linter 和自動代碼糾正,無需配置,自動格式化代碼。可以在編碼早期就發現代碼中的低級錯誤。這個代碼規范被很多知名公司所採用,比如 NPM、GitHub、mongoDB 等。
(這個 Github 地址霸氣到不行。)
jQuery JavaScript Style Guide
jQuery 是多少人入門前端的好幫手啊,可惜如今只剩回憶了。它們的這個規范算是很早期的一個代碼規范了,主要是針對它們的代碼以及早期 JavaScript 版本進行規定。
總結
以上所述是小編給大家介紹的5 種JavaScript編碼規范,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
⑵ 怎麼編寫和調用js文件
需要准備的材料分別有:電腦、html編輯器、瀏覽器。
1、首先,打開html編輯器,新建html文件,例如:index.html,填充問題基礎代碼。

⑶ nodejs 開發目錄結構有什麼規范嗎
可以看看yeoman
我覺得沒有什麼所謂的規范,可能有一些約定俗稱的習慣。比如server端最好放到lib文件夾裡面,front-end最好放到app文件夾裡面,項目發布放到dist文件夾裡面,臨時文件放到.tmp文件夾等等。
其實項目結構主要還是需要根據項目需求來。
如果前端要用到mvc架構,那麼簡單的views文件夾就不是很好滿足前端需求了,因為前端MVC裡面的views層用這個文件夾名更適合。
如果需要寫測試用例,那麼可能根目錄下就要多一個test文件夾,來對具體的代碼進行控制,而這時候雖然後端是放在lib文件夾裡面,但是為了更好的執行測試代碼,那麼server.js 或者app.js文件可能放到根目錄就比較適合了。
再比如說前端項目中的庫用bower來管理,那麼就存在bower_components文件夾,那麼bower_components放到app裡面還是放到根目錄可能就要根據具體你Grunt裡面最終項目輸出怎麼方便來決定了。
⑷ js模塊化編程有什麼規范
基礎
我們首先簡單地概述一下,自從三年前Eric Miraglia(YUI的開發者)第一次發表博客描述模塊化模式以來的一些模塊化模式。如果你已經對於這些模塊化模式非常熟悉了,大可以直接跳過本節,從「進階模式」開始閱讀。
匿名閉包
這是一種讓一切變為可能的基本結構,同時它也是Javascript最棒的特性。我們將簡單地創建一個匿名函數並立即執行它。所有的代碼將跑在這個函數內,生存在一個提供私有化的閉包中,它足以使得這些閉包中的變數能夠貫穿我們的應用的整個生命周期。
復制代碼 代碼如下:
(function () {
// ... all vars and functions are in this scope only
// still maintains access to all globals
}());
注意這對包裹匿名函數的最外層括弧。因為Javascript的語言特性,這對括弧是必須的。在js中由關鍵詞function開頭的語句總是會被認為是函數聲明式。把這段代碼包裹在括弧中就可以讓解釋器知道這是個函數表達式。
全局變數導入
Javascript有一個特性叫做隱式全局變數。無論一個變數名在哪兒被用到了,解釋器會根據作用域鏈來反向找到這個變數的var聲明語句。如果沒有找到var聲明語句,那麼這個變數就會被視為全局變數。如果這個變數用在一句賦值語句中,同時這個變數又不存在時,就會創建出一個全局變數。這意味著在匿名閉包中使用或創建全局變數是很容易的。不幸的是,這會導致寫出的代碼極難維護,因為對於人的直觀感受來說,一眼根本分不清那些是全局的變數。
幸運的是,我們的匿名函數提供了簡單的變通方法。只要將全局變數作為參數傳遞到我們的匿名函數中,就可以得到比隱式全局變數更清晰又快速的代碼了。下面是示例:
復制代碼 代碼如下:
(function ($, YAHOO) {
// now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));
模塊導出
有時你不僅想要使用全局變數,你還想要聲明它們,以供反復使用。我們可以很容易地通過導出它們來做到這一點——通過匿名函數的返回值。這樣做將會完成一個基本的模塊化模式雛形,接下來會是一個完整的例子:
復制代碼 代碼如下:
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moleProperty = 1;
my.moleMethod = function () {
// ...
};
return my;
}());
注意我們已經聲明了一個叫做MODULE的全局模塊,它擁有2個公有的屬性:一個叫做MODULE.moleMethod的方法和一個叫做MODULE.moleProperty的變數。另外,它還維護了一個利用匿名函數閉包的、私有的內置狀態。同時,我們可以很容易地導入需要的全局變數,並像之前我們所學到的那樣來使用這個模塊化模式。
進階模式
上面一節所描述的基礎已經足以應對許多情況,現在我們可以將這個模塊化模式進一步的發展,創建更多強大的、可擴展的結構。讓我們從MODULE模塊開始,一一介紹這些進階模式。
放大模式
整個模塊必須在一個文件中是模塊化模式的一個限制。任何一個參與大型項目的人都會明白將js拆分多個文件的價值。幸運的是,我們擁有一個很棒的實現來放大模塊。首先,我們導入一個模塊,並為它添加屬性,最後再導出它。下面是一個例子——從原本的MODULE中放大它:
復制代碼 代碼如下:
var MODULE = (function (my) {
my.anotherMethod = function () {
// added method...
};
return my;
}(MODULE));
我們用var關鍵詞來保證一致性,雖然它在此處不是必須的。在這段代碼執行完之後,我們的模塊就已經擁有了一個新的、叫做MODULE.anotherMethod的公有方法。這個放大文件也會維護它自己的私有內置狀態和導入的對象。
寬放大模式
我們的上面例子需要我們的初始化模塊最先被執行,然後放大模塊才能執行,當然有時這可能也不一定是必需的。Javascript應用可以做到的、用來提升性能的、最棒的事之一就是非同步執行腳本。我們可以創建靈活的多部分模塊並通過寬放大模式使它們可以以任意順序載入。每一個文件都需要按下面的結構組織:
復制代碼 代碼如下:
var MODULE = (function (my) {
// add capabilities...
return my;
}(MODULE || {}));
在這個模式中,var表達式使必需的。注意如果MODULE還未初始化過,這句導入語句會創建MODULE。這意味著你可以用一個像LABjs的工具來並行載入你所有的模塊文件,而不會被阻塞。
緊放大模式
寬放大模式非常不錯,但它也會給你的模塊帶來一些限制。最重要的是,你不能安全地覆蓋模塊的屬性。你也無法在初始化的時候,使用其他文件中的屬性(但你可以在運行的時候用)。緊放大模式包含了一個載入的順序序列,並且允許覆蓋屬性。這兒是一個簡單的例子(放大我們的原始MODULE):
復制代碼 代碼如下:
var MODULE = (function (my) {
var old_moleMethod = my.moleMethod;
my.moleMethod = function () {
// method override, has access to old through old_moleMethod...
};
return my;
}(MODULE));
我們在上面的例子中覆蓋了MODULE.moleMethod的實現,但在需要的時候,可以維護一個對原來方法的引用。
克隆與繼承
復制代碼 代碼如下:
var MODULE_TWO = (function (old) {
var my = {},
key;
for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[key];
}
}
var super_moleMethod = old.moleMethod;
my.moleMethod = function () {
// override method on the clone, access to super through super_moleMethod
};
return my;
}(MODULE));
這個模式可能是最缺乏靈活性的一種選擇了。它確實使得代碼顯得很整潔,但那是用靈活性的代價換來的。正如我上面寫的這段代碼,如果某個屬性是對象或者函數,它將不會被復制,而是會成為這個對象或函數的第二個引用。修改了其中的某一個就會同時修改另一個(譯者註:因為它們根本就是一個啊!)。這可以通過遞歸克隆過程來解決這個對象克隆問題,但函數克隆可能無法解決,也許用eval可以解決吧。因此,我在這篇文章中講述這個方法僅僅是考慮到文章的完整性。
跨文件私有變數
把一個模塊分到多個文件中有一個重大的限制:每一個文件都維護了各自的私有變數,並且無法訪問到其他文件的私有變數。但這個問題是可以解決的。這里有一個維護跨文件私有變數的、寬放大模塊的例子:
復制代碼 代碼如下:
var MODULE = (function (my) {
var _private = my._private = my._private || {},
_seal = my._seal = my._seal || function () {
delete my._private;
delete my._seal;
delete my._unseal;
},
_unseal = my._unseal = my._unseal || function () {
my._private = _private;
my._seal = _seal;
my._unseal = _unseal;
};
// permanent access to _private, _seal, and _unseal
return my;
}(MODULE || {}));
所有文件可以在它們各自的_private變數上設置屬性,並且它理解可以被其他文件訪問。一旦這個模塊載入完成,應用程序可以調用MODULE._seal()來防止外部對內部_private的調用。如果這個模塊需要被重新放大,在任何一個文件中的內部方法可以在載入新的文件前調用_unseal(),並在新文件執行好以後再次調用_seal()。我如今在工作中使用這種模式,而且我在其他地方還沒有見過這種方法。我覺得這是一種非常有用的模式,很值得就這個模式本身寫一篇文章。
子模塊
我們的最後一種進階模式是顯而易見最簡單的。創建子模塊有許多優秀的實例。這就像是創建一般的模塊一樣:
復制代碼 代碼如下:
MODULE.sub = (function () {
var my = {};
// ...
return my;
}());
雖然這看上去很簡單,但我覺得還是值得在這里提一提。子模塊擁有一切一般模塊的進階優勢,包括了放大模式和私有化狀態。
⑸ 如何寫出規范的JavaScript代碼
本人在開發工作中就曾與不按規范來開發的同事合作過,與他合作就不能用"愉快"來形容了。現在本人撰寫此文的目的除了與大家分享一點點經驗外,更多的是希望對未來的合作夥伴能夠起到一定的借鑒作用。當然,如果我說的有不科學的地方還希望各路前輩多多指教。下面分條目列出各種規范要求,這些要求都是針對同事編碼毛病提出來的,好些行業約定的其它規范可能不會再提及。1. 保證代碼壓縮後不出錯對於大型的JavaScript項目,一般會在產品發布時對項目包含的所有JavaScript文件進行壓縮處理,比如可以利用Google Closure Compiler Service對代碼進行壓縮,新版jQuery已改用這一工具對代碼進行壓縮,這一般會去掉開發時寫的注釋,除去所有空格和換行,甚至可以把原來較長的變數名替換成短且無意義的變數名,這樣做的目的是加快文件的下載速度,同時也減小網站訪問帶來的額外數據流量,另外在代碼保護上也起到了一點點作用,至少壓縮後的代碼即使被還原還是沒那麼容易一下讀懂的。要想代碼能正確通過壓縮,一般要求語句都要以分號正常結束,大括弧也要嚴格結束等,具體還要看壓縮工具的要求。所以如果一開始沒有按標准來做,等壓縮出錯後再回去找錯誤那是浪費時間。2. 保證代碼能通過特定IDE的自動格式化功能一般較為完善的開發工具(比如Aptana Studio)都有代碼"自動格式"化功能,這一功能幫助實現統一換行、縮進、空格等代碼編排,你可以設置自己喜歡的格式標准,比如左大括弧{是否另起一行。達到這個要求的目的在於方便你的開發團隊成員拿你代碼的一個副本用IDE自動格式化成他喜歡或熟悉的風格進行閱讀。你同事需要閱讀你的代碼,可能是因為你寫的是通用方法,他在其它模塊開發過程中也要使用到,閱讀你的代碼能最深入了解方法調用和實現的細節,這是簡單API文檔不能達到的效果。3. 使用標準的文檔注釋這一要求算是最基本的,這有利於在方法調用處看到方法的具體傳參提示,也可以利用配套文檔工具生成html或其它格式的開發文檔供其他團隊成員閱讀,你可以嘗試使用jsdoc-toolkit。如果你自動生成的API是出自一個開放平台,就像facebook.com應用,那麼你的文檔是給天下所有開發者看的。另外編寫完整注釋,也更方便團隊成員閱讀你的代碼,通過你的參數描述,團隊成員可以很容易知道你編寫的方法傳參與實現細節。當然也方便日後代碼維護,這樣即使再大的項目,過了很長時間後,回去改點東西也就不至於自己都忘記了當時自己寫的代碼是怎麼一回事了。4. 使用規范有意義的變數名使用規范有意義的變數名可以提高代碼的可讀性,作為大項目開發成員,自己寫的代碼不僅僅要讓別人容易看懂。開發大項目,其實每個人寫的代碼量可能都比較大,規范命名,日後自己看回自己的代碼也顯的清晰易懂,比如日後系統升級或新增功能,修改起代碼來也輕松多了。如果到頭發現自己當初寫的代碼現在看不太懂了,那還真是天大的笑話了。當然,使用有意義的變數名也盡量使用標準的命名,比如像這里:var me = this也許沒有var self = this好,因為self是Python中的關鍵字,在Python中self就是通常語言this的用法。再看下面一個例子,加s顯然比沒有加來的科學些,這樣可以知道這個變數名存的是復數,可能是數組等: var li = document.getElementsByTagName('li') var lis = document.getElementsByTagName('li') 5. 不使用生偏語法JavaScript作為一門動態腳本語言,靈活性既是優點也是缺點,眾所周知,動態語言不同層次開發人員對實現同樣一個功能寫出來的代碼在規范或語法上會存在較大的差別。不管怎麼樣,規范編碼少搞怪,不把簡單問題復雜化,不違反代碼易讀性原則才是大家應該做的。比如這語句:typeof(b) == 'string' && alert(b)應該改為:if (typeof(b) == 'string') alert(b),像前面那種用法,利用了&&運算符解析機制:如果檢測到&&前語句返回false就不再檢測後面語句,在代碼優化方面也有提到把最可能出現的情況首先判斷,像這種寫法如果條件少還好,如果條件較多而且語句也長,那代碼可讀性就相當差。又比如:+function(a){var p = a;}( 'a')應該改為:(function(a){var p = a;})( 'a'),其實function前面的+號與包含function的()括弧作用是一樣的,都是起運算優先作用,後者是常見且容易看明白的防止變數污染的做法,比如好些流行JavaScript框架就是採用後面這種方式。再說個降低代碼可讀性的例子,如:function getPostionTxt(type){return type == 2 ? "野外" : (type == 3 ? "商城" : (type == 4 ? "副本" : null));}應該改成:function getPostionTxt(type){var typeData={"2":"野外","3":"商城","4":"副本"};if (typeData[type]) return typeData[type]; else return null;}。如果type是從0開始不間斷的整數,那麼直接使用數組還更簡單,這種結果看起來就清晰多了,看到前面那種多層三元表達式嵌套頭不暈嗎。6. 不在語句非賦值地方出生中文語句中不應該出現中文我想一般人都知道,雖然這樣做不影響程序運行,但是顯然有背行業標准要求,當然我們也不是在使用"易語言"做開發。關於這一個問題,我本來不想把它拿出來說的,但我確實遇到有人這樣做的,也不知道是不是因為他的英語實在太爛了,至少還可以用拼音吧,另外尋求翻譯工具幫忙也不錯的選擇。我舉例如下,像以下寫法出現在教學中倒還可以理解:this.user['名字'] = '張三' 或者 this.user.名字 = '張三'7. 明確定義函數固定數量的參數固定數量參數的函數內部不使用arguments去獲取參數,因為這樣,你定義的方法如果包含較多的腳本,就不能一眼看到這個方法接受些什麼參數以及參數的個數是多少。比如像下面: var $ = function(){return document.getElementById(arguments[0]);}應該改成:var $ = function(elemID){return document.getElementById(elemID);} 8. 不必熱衷動態事件綁定雖然知道事件可以動態綁定,比如使用addEventListener或者使用jQuery的bind方法,也知道採用動態事件綁定可以讓XHTML更干凈,但是一般情況下我還是建議直接把事件寫在DOM節點上,我認為這樣可以使代碼變得更容易維護,因為這樣做,我們在查看源代碼的時候就可以容易地知道什麼Element綁定了什麼方法,簡單說這樣更容易知道一個按鈕或鏈接點擊時調了什麼方法腳本。9. 降低代碼與XHTML的耦合性不要過於依賴DOM的一些內容特徵來調用不同的腳本代碼,而應該定義不同功能的方法,然後在DOM上調用,這樣不管DOM是按鈕還是鏈接,方法的調用都是一樣的,比如像下面的實現顯然會存在問題: function myBtnClick(obj) { if (/確定/.test(obj.innerHTML)) alert('OK'); else if (/取消/.test(obj.innerHTML)) alert('Cancel'); else alert('Other'); } <a herf="javascript:;" onclick="myBtnClick(this)">確定</a><a herf="javascript:;" onclick="myBtnClick(this)">取消</a> 上面例子其實在一個函數內處理了兩件事情,應該分成兩個函數,像上面的寫法,如果把鏈接換成按鈕,比如改成這樣:<input type="button" onclick="myBtnClick(this)" value="確定" />,那麼myBtnClick函數內部的obj.innerHTML就出問題了,因為此時應該obj.value才對,另外如果把按鈕名稱由中文改為英文也會出問題,所以這種做法問題太多了。10. 一個函數應該返回統一的數據類型因為JavaScrip是弱類型的,在編寫函數的時候有些人對於返回類型的處理顯得比較隨便,我覺得應該像強類型語言那樣返回,看看下面的兩個例子: function getUserName(userID) { if (data[userID]) return data[userID]; else return false; } 應該改為: function getUserName(userID) { if (data[userID]) return data[userID]; else return ""; } 這個方法如果在C#中定義,我們知道它准備返回的數據類型應該是字元串,所以如果沒有找到這個數據我們就應該返回空的字元串,而不是返回布爾值或其它不合適的類型。這並沒有影響到函數將來的調用,因為返回的空字元串在邏輯判斷上可被認作"非",即與false一樣,除非我們使用全等於"==="或typeof進行判斷。11. 規范定義JSON對象,補全雙引號使用標准肯定是有好處的,那麼為什麼還是有人不使用標准呢?我想這可能是懶或習慣問題。也許還會有人跟我說,少寫引號可以減輕文件體積,我認為這有道理但不是重點。對於伺服器返回的JSON數據,使用標准結構可以利用Firefox瀏覽器的JSONView插件方便查看(像查看XML那樣樹形顯示),另外你如果使用jQuery做開發,最新版本jQuery1.4+是對JSON格式有更高要求的,具體的可以自己查閱jQuery更新文檔。比如:{name:"Tom"}或{'name':'Tom'}都應該改成{"name":"Tom"}。12. 不在文件中留下未來確定不再使用的代碼片段當代碼調整或重構後,之前編寫的不再使用的代碼應該及時刪除,如果認為這些代碼還有一定利用價值可以把它們剪切到臨時文件中。留在項目中不僅增加了文件體積,這對團隊其它成員甚至自己都起到一定干擾作用,怕將來自己看回代碼都搞不懂這方法是干什麼的,是否有使用過。當然可以用文檔注釋標簽@deprecated把這個方法標識為不推薦的。13. 不重復定義其他團隊成員已經實現的方法對於大型項目,一般會有部分開發成員實現一些通用方法,而另外一些開發成員則要去熟悉這些通用方法,然後在自己編寫模塊遇到有調用的需要就直接調用,而不是像有些開發者喜歡"單干",根本不會閱讀這些通用方法文檔,在自己代碼中又寫了一遍實現,這不僅產生多餘的代碼量,當然也是會影響團隊開發效率的,這是沒有團隊合作精神的表現,是重復造輪子的悲劇。比如在通用類文件Common.js有定義function $(elemID){return document.getElementById(elemID)}那麼就不應該在Mail.js中再次出現這一功能函數的重復定義,對於一些復雜的方法更應該如此。14. 調用合適的方法當有幾個方法都可以實現同類功能的時候,我們還是要根據場景選擇使用最合適的方法。下面拿jQuery框架的兩個AJAX方法來說明。如果確定伺服器返回的數據是JSON應該直接使用$.getJSON,而不是使用$.get得到數據再用eval函數轉成JSON對象。如果因為本次請求要傳輸大量的數據而不得以使用$.post也應該採用指定返回數據類型(設置dataType參數)的做法。如果使用$.getJSON,在代碼中我們一眼能看出本次請求伺服器返回的是JSON。溫馨提示:jQuery1.4後,如果伺服器有設置數據輸出的ContentType,比如ASP.NET C#設置 Response.ContentType = "application/json",那麼$.get將與$.getJSON的使用沒有什麼區別。15. 使用合適的控制項存儲合適的數據曾發現有人利用DIV來保存JSON數據,以待頁面下載後將來使用,像這樣:<div id="json">{ "name":"Tom"}</div>,顯然這個DIV不是用來界面顯示的,如果非要這樣做,達到使用HTML文件進行數據緩存的作用,至少改成用隱藏域來存這數據更合理,比如改成:<input type="hidden" value=" { "name":"Tom"}" />。其實也可以利用window對象來保存一些數據,像上面的例子,我們可以在AJAX請求頁直接包含這樣的腳本塊:<script>window.userData = { "name":"Tom"};</script>,當在AJAX請求回調函數中執行完$( "#MyDiv ").html(data)後,在window上就馬上有了這一變數。如果採用第一種方法,將不可避免eval(document.getElementById("UserData").innerHTML)。如果在window對象存放大量數據的話,這些數據不用時要及時手動清理它們,它們是要等瀏覽器刷新或重啟後才會消失的,這就會增加內存開銷。16. 永遠不要忽略代碼優化工作代碼最優化是每個程序員應該努力達到的目標,也應該成為程序員永遠的追求。寫代碼的時候,不應該急著把功能實現出來,要想一下如何寫代碼,代碼的執行效率才是較好的。舉個例子:假設有定義getElementById的快捷方法functoin $(elemID){return document.getElementById(elemID)},那麼有人可能會寫出這樣的代碼$("MyDiv").parentNode.removeChild($("MyDiv")),其實這里執行了兩次getElementById DOM查找,如果改成這樣將更好:var myDiv = $("MyDiv"); myDiv.parentNode.removeChild(myDiv)。還好getElementById的DOM查找算比較快,如果換成getElementsByTagName則更應該注重優化了。jQuery開發團隊也有提醒大家要注意這方面的問題。當然,代碼優化技巧也是需要個人不斷積累的。曾有朋友跟我說他寫網站後台代碼從來不用考慮優化的,因為他們網站用的是至強四核伺服器,我覺得這是很可笑的。17. 會分析策劃文檔,能用面向對象方法進行介面定義和代碼組織這一能力對於每一個程序員來說都是非常重要的,這也是決定一個程序員水平高低的一個重要因素。能夠把需求細化並抽象出不同的類,然後有條理地編寫代碼,使代碼結構清晰,可讀性高,代碼易於維護,不至於太過程化而且雜亂無章,這樣才算是一個優秀的程序員。
⑹ html css js 是編程語言 還只是一種規范
這三個語言是相互獨立的同時也是相互配合的
html:超文本標記語言,標准通用標記語言下的一個應用。
cSS:層疊樣式表是一種用來表現HTML(標准通用標記語言的一個應用)或XML(標准通用標記語言的一個子集)等文件樣式的計算機語言。
JS:JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於客戶端的腳本語言,最早是在HTML(標准通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能。
⑺ requirejs模塊化編程怎麼理解
一、Javascript模塊化編程
目前,通行的Javascript模塊規范共有兩種:CommonJS和AMD。
1、commonjs
2009年,美國程序員Ryan Dahl創造了node.js項目,將javascript語言用於伺服器端編程,這標志」Javascript模塊化編程」正式誕生。
在瀏覽器環境下,沒有模塊也不是特別大的問題,畢竟網頁程序的復雜性有限;但是在伺服器端,一定要有模塊,與操作系統和其他應用程序互動,否則根本沒法編程。
node.js的模塊系統,就是參照CommonJS規范實現的。在CommonJS中,有一個全局性方法require(),用於載入模塊。
假定有一個數學模塊math.js,就可以像下面這樣載入。
var math = require('math');
然後,就可以調用模塊提供的方法:
var math = require('math');
math.add(2,3); // 5
因為這個系列主要針對瀏覽器編程,不涉及node.js,所以對CommonJS就不多做介紹了。我們在這里只要知道,require()用於載入模塊就行了。
2、AMD
AMD是」Asynchronous Mole Definition」的縮寫,意思就是」非同步模塊定義」。它採用非同步方式載入模塊,模塊的載入不影響它後面語句的運行。所有依賴這個模塊的語句,都定義在一個回調函數中,等到載入完成之後,這個回調函數才會運行。
模塊定義
define(id?, dependencies?, factory);
其中:
id: 模塊標識,可以省略。
dependencies: 所依賴的模塊,可以省略。
factory: 模塊的實現,或者一個JavaScript對象。
模塊載入
AMD也採用require()語句載入模塊,但是不同於CommonJS,它要求兩個參數:
require([mole], callback);
第一個參數[mole],是一個數組,裡面的成員就是要載入的模塊;第二個參數callback,則是載入成功之後的回調函數。如果將前面的代碼改寫成AMD形式,就是下面這樣:
require(['math'], function (math) {
math.add(2, 3);
});
math.add()與math模塊載入不是同步的,瀏覽器不會發生假死。所以很顯然,AMD比較適合瀏覽器環境。
目前,主要有兩個Javascript庫實現了AMD規范:require.js和curl.js。本系列的第三部分,將通過介紹require.js,進一步講解AMD的用法,以及如何將模塊化編程投入實戰。
二、requirejs模塊化編程
require.js載入的模塊,採用AMD(非同步模塊定義規范) 規范。也就是說,模塊必須按照AMD的規定來寫。
require.js的兩個重要的特點:
1、實現js文件的非同步載入,避免網頁失去響應
2、管理模塊之間的依賴性,便於代碼的編寫和維護
載入requirejs:
<script src="js/require.js" data-main="js/main"></script>
data-main屬性的作用是,指定網頁程序的主模塊。在上例中,就是js目錄下面的main.js,這個文件會第一個被require.js載入。由於require.js默認的文件後綴名是js,所以可以把main.js簡寫成main。
main.js常見實例:
require.config({
paths: {
moleA: '',
moleB:'',
moleC:''
}
});
require(['moleA', 'moleB', 'moleC'], function (moleA, moleB, moleC){
// some code here
});
1、require.config
require.config用來配置一些參數,它將影響到requirejs庫的一些行為。
require.config的參數是一個JS對象,常用的配置有baseUrl,paths等。
這里配置了paths參數,使用模塊名「jquery」,其實際文件路徑jquery-1.7.2.js(後綴.js可以省略)。
我們知道jQuery從1.7後開始支持AMD規范,即如果jQuery作為一個AMD模塊運行時,它的模塊名是「jquery」。注意「jquery」是固定的,不能寫「jQuery」或其它。
註:如果文件名「jquery-1.7.2.js」改為「jquery.js」就不必配置paths參數了。
如果將jQuery應用在模塊化開發時,其實可以不使用全局的,即可以不暴露出來。需要用到jQuery時使用require函數即可。
2、require()函數
require()函數接受兩個參數。第一個參數是一個數組,表示所依賴的模塊,上例就是['moleA', 'moleB',
'moleC'],即主模塊依賴這三個模塊;第二個參數是一個回調函數,當前面指定的模塊都載入成功後,它將被調用。載入的模塊會以參數形式傳入該函數,從而在回調函數內部就可以使用這些模塊。
⑻ Node.js開發指南的圖書目錄
第1章Node.js簡介 1
1.1Node.js 是什麼 2
1.2Node.js 能做什麼 3
1.3非同步式 I/O 與事件驅動 4
1.4Node.js 的性能 5
1.4.1Node.js 架構簡介 5
1.4.2Node.js 與 PHP + Nginx 6
1.5JavaScript 簡史 6
1.5.1Netscape 與 LiveScript 7
1.5.2Java 與 Javascript 7
1.5.3微軟的加入—— JScript 8
1.5.4標准化—— ECMAScript 8
1.5.5瀏覽器兼容性問題 9
1.5.6引擎效率革命和 JavaScript 的未來 9
1.6CommonJS 10
1.6.1服務端 JavaScript 的重生 10
1.6.2CommonJS 規范與實現 11
1.7參考資料 12
第2章安裝和配置Node.js 13
2.1安裝前的准備 14
2.2快速安裝 14
2.2.1Microsoft Windows系統上安裝Node.js 14
2.2.2Linux 發行版上安裝Node.js 16
2.2.3Mac OS X上安裝Node.js 16
2.3編譯源代碼 17
2.3.1在 POSIX 系統中編譯 17
2.3.2在 Windows系統中編譯 18
2.4安裝Node 包管理器 18
2.5安裝多版本管理器 19
2.6參考資料 21
第3章Node.js快速入門 23
3.1開始用 Node.js 編程 24
3.1.1Hello World 24
3.1.2Node.js 命令行工具 25
3.1.3建立 HTTP 伺服器 26
3.2非同步式 I/O 與事件式編程 29
3.2.1阻塞與線程 29
3.2.2回調函數 31
3.2.3事件 33
3.3模塊和包 34
3.3.1什麼是模塊 35
3.3.2創建及載入模塊 35
3.3.3創建包 38
3.3.4Node.js 包管理器 41
3.4調試 45
3.4.1命令行調試 45
3.4.2遠程調試 47
3.4.3使用 Eclipse 調試 Node.js 48
3.4.4使用 node-inspector 調試Node.js 54
3.5參考資料 55
第4章Node.js核心模塊 57
4.1全局對象 58
4.1.1全局對象與全局變數 58
4.1.2process 58
4.1.3console 60
4.2常用工具 util 61
4.2.1util.inherits 61
4.2.2util.inspect 62
4.3事件驅動 events 63
4.3.1事件發射器 64
4.3.2error 事件 65
4.3.3繼承 EventEmitter 65
4.4文件系統 fs 65
4.4.1fs.readFile 66
4.4.2fs.readFileSync 67
4.4.3fs.open 67
4.4.4fs.read 68
4.5HTTP 伺服器與客戶端 70
4.5.1HTTP 伺服器 70
4.5.2HTTP 客戶端 74
4.6參考資料 77
第5章使用Node.js進行Web開發 79
5.1准備工作 80
5.1.1使用http模塊 82
5.1.2Express 框架 83
5.2快速開始 84
5.2.1安裝 Express 84
5.2.2建立工程 85
5.2.3啟動伺服器 86
5.2.4工程的結構 87
5.3路由控制 89
5.3.1工作原理 89
5.3.2創建路由規則 92
5.3.3路徑匹配 93
5.3.4REST 風格的路由規則 94
5.3.5控制權轉移 95
5.4模板引擎 97
5.4.1什麼是模板引擎 97
5.4.2使用模板引擎 98
5.4.3頁面布局 99
5.4.4片段視圖 100
5.4.5視圖助手 100
5.5建立微博網站 102
5.5.1功能分析 102
5.5.2路由規劃 102
5.5.3界面設計 103
5.5.4使用Bootstrap 104
5.6用戶注冊和登錄 107
5.6.1訪問資料庫 107
5.6.2會話支持 110
5.6.3注冊和登入 111
5.6.4頁面許可權控制 120
5.7發表微博 123
5.7.1微博模型 123
5.7.2發表微博 125
5.7.3用戶頁面 126
5.7.4首頁 127
5.7.5下一步 129
5.8參考資料 129
第6章Node.js進階話題 131
6.1模塊載入機制 132
6.1.1模塊的類型 132
6.1.2按路徑載入模塊 132
6.1.3通過查找node_moles目錄載入模塊 133
6.1.4載入緩存 134
6.1.5載入順序 134
6.2控制流 135
6.2.1循環的陷阱 135
6.2.2解決控制流難題 137
6.3Node.js 應用部署 138
6.3.1日誌功能 138
6.3.2使用cluster模塊 140
6.3.3啟動腳本 142
6.3.4共享80埠 143
6.4Node.js 不是銀彈 144
6.5參考資料 146
附錄AJavaScript的高級特性 147
附錄BNode.js編程規范 167
索引 175

⑼ js是什麼
js等於JavaScript,下面是解釋:
JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基於原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用於客戶端的腳本語言,最早是在HTML(標准通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能。
在1995年時,由Netscape公司的Brendan Eich,在網景導航者瀏覽器上首次設計實現而成。因為Netscape與Sun合作,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript。但實際上它的語法風格與Self及Scheme較為接近。
為了取得技術優勢,微軟推出了JScript,CEnvi推出ScriptEase,與JavaScript同樣可在瀏覽器上運行。為了統一規格,因為JavaScript兼容於ECMA標准,因此也稱為ECMAScript。
外文名:JavaScript
發行時間:1992年
設計者:Brendan Eich
實現者:Netscape、Mozilla基金會
編程范型:腳本語言、基於原型的面向對象
形態系統:動態類型
發源地:美國
組成部分
ECMAScript,描述了該語
javascript組成
言的語法和基本對象。
文檔對象模型(DOM),描述處理網頁內容的方法和介面。
瀏覽器對象模型(BOM),描述與瀏覽器進行交互的方法和介面。
基本特點
JavaScript是一種屬於網路的腳本語言,已經被廣泛用於Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。
是一種解釋性腳本語言(代碼不進行預編譯)。
主要用來向HTML(標准通用標記語言下的一個應用)頁面添加交互行為。
可以直接嵌入HTML頁面,但寫成單獨的js文件有利於結構和行為的分離。
跨平台特性,在絕大多數瀏覽器的支持下,可以在多種平台下運行(如Windows、Linux、Mac、Android、iOS等)。
Javascript腳本語言同其他語言一樣,有它自身的基本數據類型,表達式和算術運算符及程序的基本程序框架。Javascript提供了四種基本的數據類型和兩種特殊數據類型用來處理數據和文字。而變數提供存放信息的地方,表達式則可以完成較復雜的信息處理。
日常用途
嵌入動態文本於HTML頁面。
對瀏覽器事件做出響應。
讀寫HTML元素。
在數據被提交到伺服器之前驗證數據。
檢測訪客的瀏覽器信息。
控制cookies,包括創建和修改等。
基於Node.js技術進行伺服器端編程。
歷史
它最初由Netscape的Brendan Eich設計。JavaScript是甲骨文公司的注冊商標。Ecma國際以JavaScript為基礎制定了ECMAScript標准。JavaScript也可以用於其他場合,如伺服器端編程。完整的JavaScript實現包含三個部分:ECMAScript,文檔對象模型,瀏覽器對象模型。
Netscape在最初將其腳本語言命名為LiveScript,後來Netscape在與Sun合作之後將其改名為JavaScript。JavaScript最初受Java啟發而開始設計的,目的之一就是「看上去像Java」,因此語法上有類似之處,一些名稱和命名規范也借自Java。但JavaScript的主要設計原則源自Self和Scheme。JavaScript與Java名稱上的近似,是當時Netscape為了營銷考慮與Sun微系統達成協議的結果。為了取得技術優勢,微軟推出了JScript來迎戰JavaScript的腳本語言。為了互用性,Ecma國際(前身為歐洲計算機製造商協會)創建了ECMA-262標准(ECMAScript)。兩者都屬於ECMAScript的實現。盡管JavaScript作為給非程序人員的腳本語言,而非作為給程序人員的腳本語言來推廣和宣傳,但是JavaScript具有非常豐富的特性。
發展初期,JavaScript的標准並未確定,同期有Netscape的JavaScript,微軟的JScript和CEnvi的ScriptEase三足鼎立。1997年,在ECMA(歐洲計算機製造商協會)的協調下,由Netscape、Sun、微軟、Borland組成的工作組確定統一標准:ECMA-262。
上面部分信息來自網路
⑽ js什麼意思
JavaScript(簡稱「JS」) 是一種具有函數優先的輕量級,解釋型或即時編譯型的編程語言。
雖然它是作為開發Web頁面的腳本語言而出名的,但是它也被用到了很多非瀏覽器環境中,JavaScript 基於原型編程、多範式的動態腳本語言,並且支持面向對象、命令式和聲明式(如函數式編程)風格。
它最初由Netscape的Brendan Eich設計。Netscape在最初將其腳本語言命名為LiveScript,後來Netscape在與Sun合作之後將其改名為JavaScript。
JavaScript與Java名稱上的近似,是當時Netscape為了營銷考慮與Sun微系統達成協議的結果。

(10)js編程規范擴展閱讀
JavaScript腳本語言具有以下特點:
1、腳本語言
JavaScript是一種解釋型的腳本語言,C、C++等語言先編譯後執行,而JavaScript是在程序的運行過程中逐行進行解釋。
2、基於對象
JavaScript是一種基於對象的腳本語言,它不僅可以創建對象,也能使用現有的對象。
3、簡單
JavaScript語言中採用的是弱類型的變數類型,對使用的數據類型未做出嚴格的要求,是基於Java基本語句和控制的腳本語言,其設計簡單緊湊。
4、動態性
JavaScript是一種採用事件驅動的腳本語言,它不需要經過Web伺服器就可以對用戶的輸入做出響應。在訪問一個網頁時,滑鼠在網頁中進行滑鼠點擊或上下移、窗口移動等操作JavaScript都可直接對這些事件給出相應的響應。
5、跨平台性
JavaScript腳本語言不依賴於操作系統,僅需要瀏覽器的支持。因此一個JavaScript腳本在編寫後可以帶到任意機器上使用,前提上機器上的瀏覽器支 持JavaScript腳本語言,目前JavaScript已被大多數的瀏覽器所支持。
