javascript招式總結

2021-09-17 06:59:31 字數 2597 閱讀 7247

var fuc1 = (function() 

})()

fuc1('world'); // hello world

模組模式的一般形式是:乙個定義了私有變數和函式;利用閉包建立可以訪問私有變數和函式的特權函式;最後返回這個特權函式,或者把它們儲存到乙個可訪問的地方。

該招式有以下應用場景

**需要在兩個非同步fuc1fuc2都執行結束後再執行,

var manager = (function() 

}})()

function fuc1()

function fuc2()

settimeout(function() , 10)

settimeout(function() , 10)

var createxhr = (function () 

}else if(typeof activexobject != "undefined") catch(ex)}}

return new activexobject(arguments.callee.activexstring);

}}else

}})();

var parse = (function() 

})()

parse(1); // i

parse(4); // iv

柯里化聽起來很高大上,然而也就是currying的音譯,千萬別被名稱嚇跑了。

它是把接受多個引數的函式中的引數拆分成兩次呼叫來傳遞並返回結果的新函式。

舉乙個簡單的例子理解一下:

var add = function(a, b) 

add(1, 2) // 3

var currying = function(a)

}currying(1)(2) // 3

add為 接受多個引數的函式,currying是將add中的引數分兩次呼叫傳入並返回結果的新函式。

仔細想想,它其實是模組的衍生招式。模組的私有變數是預先定義好的,而柯里化是儲存第一次呼叫時傳入的引數為私有變數。因此它倆的區別是私有變數定義時機不同

下面是乙個利用柯里化實現的累加方法

var currying = function (fn) 

args = args.concat(innerargs);

return arguments.callee;

}}var mutil = function ()

return num

}var add = currying(mutil);

add(1,2)(3);

add(4);

add(); // 10

某些**不可以在沒有間斷的情況下連續重複執行,所有就需要節流。比如:拖動某dom元素時,需要動態改變元素的 x y ,就需要用到節流函式了。

function throttle(method, delay) , delay);

}}window.onresize = throttle(resizehandle, 50)

使用該函式時你會發現乙個問題:不斷拖動元素的過程中元素是不動的,只有停頓一下元素才跟著動。

這樣的體驗很糟糕,為了提高效能、改善體驗,需要公升級一下節流函式。設定乙個最大時間間隔來確保在拖動的過程中,元素可以跟隨移動。

function throttle(method, context, delay, maxinterval) else, delay)}}

}window.onresize = throttle(resizehandle, 50, 100)

在業務中經常會遇到一些不需要同步處理的,又比較耗時的邏輯。對於這些邏輯可以採用資料分塊(array chunking)的技術,小塊小塊地處理陣列,通常每次一小塊。可以建立乙個「待辦事項」佇列,然後使用定時器逐個取出「事項」,接著設定另乙個定時器。

function chunk(array, process, context) 

}, 100)

}

函式可以將先前操作的結果記錄在某個物件裡,從而避免重複運算,比如計算階乘函式。

function memoizer(memory, handle) 

return result;

}}var memory = [1, 1],

factorial = memoizer(memory, function (recur, n) );

factorial(4);

console.log(memory); // [1, 1, 2, 6, 24]

(未完待續......)

李連杰的簡單招式

我看過李連杰不少的 我感覺他好看的地方不是痛打敵人,而是他那穩紮穩打的一招一式。由此我想到了我的技術,如果我們在某個方面把基本共練到了他那樣的地步,那麼你就會再某個方面把本領發揮得淋漓盡致。我想在程式設計技術方面有所成就,但是很明顯的感覺自己基礎不牢,解決一些簡單的問題還能出手,但是問題稍微難點就變...

javascript事件總結

onabort 影象載入被中斷 onblur 失去焦點 onclick 滑鼠單擊某個物件 onchange 使用者改變內容 ondbclick 滑鼠雙擊某個物件 onerror 當載入文件或物件時發生某個錯誤 onfocus 獲得焦點 onkeydown 鍵盤的鍵被按下 onkeypress 鍵盤的...

javascript物件總結

js中內建了17個物件,常用的是array物件 date物件 正規表示式物件 string物件 global物件 concat 表示把幾個陣列合併成乙個陣列 join 返回字串值,其中包含了連線到一起的陣列的所有元素,元素由指定的分隔符分隔開來 pop 移除陣列最後乙個元素 shift 移除陣列中第...