摘要:引擎的內部運行機制是單線程作為瀏覽器腳本語言,的主要用途是與用戶互動,以及操作。這決定了它只能是單線程,否則會帶來很復雜的同步問題任務隊列單線程就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務。
JavaScript引擎的內部運行機制
http://www.ruanyifeng.com/blo...JavaScript是單線程
作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。這決定了它只能是單線程,否則會帶來很復雜的同步問題
任務隊列單線程就意味著,所有任務需要排隊,前一個任務結束,才會執行后一個任務。如果前一個任務耗時很長,后一個任務就不得不一直等著
同步任務(synchronous)指的是,在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行后一個任務;
異步任務(asynchronous)指的是,不進入主線程、而進入"任務隊列"(task queue)的任務,只有"任務隊列"通知主線程,某個異步任務可以執行了,該任務才會進入主線程執行
req.send方法是Ajax操作向服務器發送數據,它是一個異步任務,意味著只有當前腳本的所有代碼執行完,系統才會去讀取"任務隊列"
function func(x,y){ var value=300; return function(){ return value+x+y; }; } console.info(func(100,200)());//600參數
var values = [ 213, 16, 2058, 54, 10, 1965, 57, 9 ]; values.sort(function(value1,value2){return value2 - value1; });this
window.color = "red"; var o = { color: "blue" }; function sayColor(){ alert(this.color); } sayColor(); //red sayColor.call(this); //red sayColor.call(window); //red sayColor.call(o); //blue閉包(closure)
http://www.ruanyifeng.com/blo...閉包的用途
Javascript語言的特殊之處,就在于函數內部可以直接讀取全局變量
函數外部自然無法讀取函數內的局部變量
**函數內部聲明變量的時候,一定要使用var命令。如果不用的話,你實際上聲明了一個全局變量!
Javascript語言特有的"鏈式作用域"結構(chain scope),子對象會一級一級地向上尋找所有父對象的變量。所以,父對象的所有變量,對子對象都是可見的,反之則不成立。
,一個是前面提到的可以讀取函數內部的變量,
另一個就是讓這些變量的值始終保持在內存中
function a() { var i = 0;//局部變量 return function b() { //a是b的父函數,b被賦給一個全局變量,導致b始終在內存中,而a依賴于b,因此a也始終在內存中,不會在調用結束后,被垃圾回收機制(garbage collection)回收。 console.info(++i); }; }; var c = a(); for (var i = 0; i < 10; i++) { c(); }節流函數
function delayFn2 (fn, delay, mustDelay){ var timer = null; var t_start; return function(){ var context = this, args = arguments, t_cur = +new Date(); //先清理上一次的調用觸發(上一次調用觸發事件不執行) clearTimeout(timer); //如果不存觸發時間,那么當前的時間就是觸發時間 if(!t_start){ t_start = t_cur; } //如果當前時間-觸發時間大于最大的間隔時間(mustDelay),觸發一次函數運行函數 if(t_cur - t_start >= mustDelay){ fn.apply(context, args); t_start = t_cur; } //否則延遲執行 else { timer = setTimeout(function(){ fn.apply(context, args); }, delay); } }; } var count=0; function fn1(){ count++; console.log(count) } //100ms內連續觸發的調用,后一個調用會把前一個調用的等待處理掉,但每隔200ms至少執行一次 document.onmousemove=delayFn2(fn1,100,200)鉤子函數
使用data-*屬性作為JS鉤子,是不正確的。
data-*屬性,根據規范,用于存儲自定義的數據隱私的頁面或應用程序
data-* 屬性被設計來存儲數據,而不被綁定到
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/89451.html
摘要:因此,所有在方法中定義的變量都是放在棧內存中的當我們在程序中創建一個對象時,這個對象將被保存到運行時數據區中,以便反復利用因為對象的創建成本通常較大,這個運行時數據區就是堆內存。 上一篇:《javascript高級程序設計》筆記:繼承近幾篇博客都會圍繞著圖中的知識點展開 showImg(https://segmentfault.com/img/bVY0C4?w=1330&h=618);...
摘要:對象有狀態對象具有狀態,同一對象可能處于不同狀態之下。中對象獨有的特色對象具有高度的動態性,這是因為賦予了使用者在運行時為對象添改狀態和行為的能力。小結由于的對象設計跟目前主流基于類的面向對象差異非常大,導致有不是面向對象這樣的說法。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些...
摘要:對象有狀態對象具有狀態,同一對象可能處于不同狀態之下。中對象獨有的特色對象具有高度的動態性,這是因為賦予了使用者在運行時為對象添改狀態和行為的能力。小結由于的對象設計跟目前主流基于類的面向對象差異非常大,導致有不是面向對象這樣的說法。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些...
摘要:對象有狀態對象具有狀態,同一對象可能處于不同狀態之下。中對象獨有的特色對象具有高度的動態性,這是因為賦予了使用者在運行時為對象添改狀態和行為的能力。小結由于的對象設計跟目前主流基于類的面向對象差異非常大,導致有不是面向對象這樣的說法。 筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些...
摘要:第條盡量少使用全局對象避免聲明全局變量盡量聲明局部變量避免對全局變量增加屬性第條始終聲明局部變量第條避免使用語句第條熟練使用閉包的函數值包含了比調用他們時執行所需要的代碼還要更多的信息。那些在其所涵蓋的作用域內跟蹤變量的函數稱為閉包。 書還沒看完。一遍看,一遍寫讀書筆記。 這本書的序是JavaScript之父Brendan Eich寫的,作者是JavaScript標準化委員會專家。可想...
閱讀 1135·2021-09-22 15:32
閱讀 1731·2019-08-30 15:53
閱讀 3263·2019-08-30 15:53
閱讀 1418·2019-08-30 15:43
閱讀 461·2019-08-28 18:28
閱讀 2576·2019-08-26 18:18
閱讀 676·2019-08-26 13:58
閱讀 2535·2019-08-26 12:10