javascript為網頁在客戶端帶來方便控制之外.也帶來了很多問題.其中腳本失控就是最頭痛的問題之一.
而使腳本失控的主要原因之一就是循環中執行了太多的操作
循環導致失控的原因有二條,一是循環休操作過多,二是循環次數過多.
解決這個問題的訣竅就是用下面這兩個問題來評估每個循環:
這個循環必須要同步執行麼?
循環裡面的數據,必須依序執行麼?
如果兩個問題的答案都是否定的話,你就可以選擇將循環裡的操作來分解。關鍵是要根據程式碼的具體環境來確定上面兩個問題的答案。典型的循環可能像下面這個樣子:
for(var i=0; i process(items[i]);
}
乍一看這個循環並沒有太大的問題,是不是會運行很久完全取決於循環的次數。如果緊接循環後沒有其他程式碼在執行的時候需要依賴循環的結果,那麼第一個問題的答案就是「不」。你也可以發現,循環每次只處理一個數值,而且不依賴上一次循環的結果,所以第二個問題的答案同樣也是否定的。這就意味著,循環可以透過某種方式拆解,不會導致鎖定瀏覽器而顯示腳本失控的提示。
在《Professional JavaScript, Second Edition》這本書中,對於那些執行次數非常巨大的虛幻,我推薦使用下面的方式來處理:
function chunk(array, process, context){
function chunk(array, process, context){
function chunk(array, process, context){ setTimeout(function(Timeout(function(Timeout)(function( ){
var item = array.shift();
setTimeout(arguments.callee, 100);
}
}, 100) ;
}
chunk()函數的用途就是將一個陣列分成小塊處理(這也是名字的由來),我們可以傳遞三個參數。要處理的數組物件、處理函數以及一個可選的上下文變量,用於設定process()函數中對應的this物件。第一個timer用於處理操作之間的延遲(這裡設定為100毫秒,大家可以依照實際需要自行修改)。每次執行這個函數,都會將數組中的第一個對象取出,並傳給process()函數進行操作,如果這時process()中還有未處理完的對象,另外一個timer就會啟動,用於重複等待。上面提到的循環,可以透過下面的方法使用這個函數:
chunk(items, process);
需要注意的是,在這裡數組採用了隊列(queue)的形式,而且在循環的過程中,每次都會發生修改。如果你要修改陣列的原始狀態,這裡介紹兩種途徑:一種是透過concat()函數,在傳遞之前,建立一個目前陣列的副本:
chunk(items.concat(), process);
另一個選擇是直接修改chunk()函數,直接在函數內部進行修改:
function chunk(array, process, context){
var items = array.concat(); //clone the array
(){
var item = items.shift();
process.call(context, item);
setTimeout(arguments.callee, 100);
}
}, 100 );
}

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver CS6
視覺化網頁開發工具