1. 程式人生 > >js中的函式節流

js中的函式節流

對於常見的場景,1、使用onresize 事件處理程式的時候容易發生,當調整瀏覽器大小的時候,該事件會連續觸發。在onresize 事件處理程式內部如果嘗試進行DOM 操作,其高頻率的更改可能會讓瀏覽器崩潰。 
2、我們常見的一個搜尋的功能,我們一般是繫結keyup事件,每按下一次鍵盤就搜尋一次。但是我們的目的主要是每輸入一些內容搜尋一次而已。

大部分節流都採用時間做節流,即時間間隔小於多少的不再呼叫,但同時保證一個最小呼叫間隔。(否則拖拽類的節流都將無效果),也可以用呼叫次數做節流,但要考慮最後一次呼叫需要要執行。

概念:函式節流是通過一個定時器,阻斷連續重複的函式呼叫,從而一定程度上優化效能。

用途:主要用於使用者介面呼叫的函式,如:resize、mousemove、keyup事件的監聽函式。 
這類監聽函式的主要特徵: 
1、短時間內連續多次重複觸發; 
2、大量的DOM操作。

意義:在使用者察覺範圍外,降低函式呼叫的頻率,從而提升效能

函式節流的原理

函式節流的原理挺簡單的,那就是定時器。當我觸發一個時間時,先setTimout讓這個事件延遲一會再執行,如果在這個時間間隔內又觸發了事件,那我們就clear掉原來的定時器,再setTimeout一個新的定時器延遲一會執行,就這樣。

具體程式碼的實現,看到一個不錯的方法:impress用的一個封裝函式:

var throttle = function(fn, delay){
 	var timer = null;
 	return function(){
 		var context = this, args = arguments;
 		clearTimeout(timer);
 		timer = setTimeout(function(){
 			fn.apply(context, args);
 		}, delay);
 	};
 };


它使用閉包的方法形成一個私有的作用域來存放定時器變數timer。而呼叫方法為

window.onresize = throttle(myFunc, 100);

相關推薦

js函式物件建立的總結

在JavaScript的函式物件建立方法中,可以分為三種情況: 1:第一種是使用function語句定義函式 1 <script type="text/javascript"> 2 function fun1(){ 3 alert("我的第一個方法"); 4 } 5

js函式宣告提前

js中函式宣告提前 js中普通的變數會宣告提前外,函式也會宣告提前,不同的是由於函式的宣告有兩種方法,宣告提前的方式也就有兩種方式; 1、通過 var fn=function(){}定義函式,只是將函式名提前了,函式體沒有提前,如果在函式體前使用fn()呼叫函式就會報錯 fn();

js函式與物件的關係

結論:物件是由函式建立的   物件fn1由Fn函式建立 function Fn() { this.name='樑志勇'; } var fn1 = new Fn(); var obj = new Object();

js呼叫jQuery函式的方法和jQuery呼叫js函式的方法

js呼叫jQuery方法: function getResult(){ //呼叫方式 $().getFuc(); }; //獲取文字框值 $(function(){ //名字為getFuc的jQuery方法 $.fn.getFuc=function(){

關於js函式的動態呼叫

    在js中通過函式名字串動態呼叫的實現方式:     1、使用eval(funcName(param...));     2、首先var func=function(params...);然後this["funcName"].call(params...)呼叫;   

JS函式引數值傳遞和引用

我們可以把ECMAScript函式的引數想象成區域性變數。在向引數傳遞基本型別的值時,被傳遞的值被複制給一個區域性變數(即命名引數,或者用ECMAScript的概念來說,就是arguments物件中的一個元素)。在向引數傳遞引用型別時,會把這個值在記憶體中的地址(指標)複製給一個區域性變數,因此這個區域性變數

js函式的三種定義方式、函式宣告、函式同名重複、函式刪除、

全棧工程師開發手冊 (作者:欒鵬) 在js中,函式本身屬於物件的一種,因此可以定義、賦值,作為物件的屬性或者成為其他函式的引數。函式名只是函式這個物件類的引用。 一、函式定義 【1】函式宣告語句 使用function關鍵字,後跟一組引數以及函

JS函式宣告與函式表示式的不同

Js中的函式宣告是指下面的形式:       function functionName(){ }  這樣的方式來宣告一個函式,而函式表示式則是類似表示式那樣來宣告一個函式,如:        var functionName = function(){ }  可能很多

js函式,方法,事件對比區分

 有問題可以掃碼加我微信,有償解決問題。承接小程式開發。 微信小程式開發交流qq群   173683895  、 526474645 ; 正文: 1.函式和方法: 一個類有方法和屬性,也可以說它有成員函式和成員變數, 所以函式和方法之間概念是相同的:都是由若干語句組成

JS函式的兩種定義方法

定義函式 在JavaScript中,定義函式的方式如下: function abs(x) { if (x >= 0) { return x; } else {

js函式的返回值return

                            js中函式的返回值:return 一、函式的返回值需要注意的幾點:       1、函式名+括號:如fn1() == return 後面的值  

JS函式的引數是按值傳遞還是按引用傳遞?

《JavaScript高階程式設計(第3版)》中P70頁關於傳遞引數一上來就各種強調開發人員會錯誤的認為引數是按引用傳遞,前後看了幾遍,甚是迷惑,被幾個概念繞得暈乎,說的是玄之又玄,於是花了一下午準備把這個點的所有概念理清。一、兩種不同資料型別的值基本型別值,指簡單的資料段,

js函式與變數名重名

alert(a); a(); var a=3; function a(){ alert(10); } alert(a); a=6; a(); sf上翻文章,看到這道題,先答題後coding驗證,第三個alert答錯了。。。 然後又拆成 var a=3; f

js函式宣告與函式表示式以及匿名函式的理解

在JS的學習中遇到一些JS函式宣告的問題,找了一些資料學習之後,有了自己的一些初步的認識。 首先,瞭解函式宣告,函式宣告:就是使用關鍵字function,與指定的某個欄位組成函式,作為函式宣告。例如: function funName(){ // }這就是簡單的函式函式聲明瞭。 接下來就是函式表示式,函

JS函式宣告和函式表示式的區別

review專案程式碼時,不同JS檔案之間在沒有相互引用的情況下,可以使用對方的方法,上網查了一下原因如下:在<body>標籤結束之前以下面的方式引入兩個js檔案<script src="a.js"></script> <script

JS函式內套函式的呼叫

如果函式裡面套了一個函式,而且有return。那麼有兩種方法呼叫裡面巢狀的函式 function f1() { var n = 99; function f2() { alert(n); } return f2; //

js函式引數傳遞

js中的引數傳遞是按照引數型別的不同,傳遞方法不同。如果是基本型別的傳遞,則傳遞的是值的副本,形參和實參是兩個獨立的個體,如果是引用型別的傳遞,那麼傳遞的是這個值在記憶體中的地址的副本,區域性變數的變化會表現在函式外部。 舉例子說明一下: function

關於js函式的閉包 深入瞭解

閉包就是能夠讀取其他函式內部變數的函式。 即函式定義和函式表示式位於另一個函式的函式體內。而且,這些內部函式可以訪問它們所在的外部函式中宣告的所有區域性變數、引數和宣告的其他內部函式。當其中一個這樣

js函式的定義有無順序的區別

根據網上看的文章,小結如下: JavaScript程式碼是從上到下順序執行的。 JavaScript解釋引擎在執行任何函式呼叫之前,首先會在全域性作用域中註冊以定義式建立的函式,然後再依次執行函式呼

js函式返回值return

全棧工程師開發手冊 (作者:欒鵬) 函式返回值 1、所有函式都有返回值,沒有return語句時,預設返回內容為undefined,和其他面向物件的程式語言一樣,return語句不會阻止f