Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
avaScript 是一門單線程執(zhí)行的編程語言。也就是說,同一時間只能做一件事情。如果前一個任務(wù)非常耗時,則后續(xù)的任務(wù)就不得不一直等待,從而導致程序假死的問題。
所以為了防止某個耗時任務(wù)導致程序假死的問題,JavaScript 把待執(zhí)行的任務(wù)分為了兩類:
1. 同步任務(wù)(synchronous)
又叫做非耗時任務(wù),指的是在主線程上排隊執(zhí)行的那些任務(wù),只有前一個任務(wù)執(zhí)行完畢,才能執(zhí)行后一個任務(wù)。
2. 異步任務(wù)(asynchronous)
又叫做耗時任務(wù),異步任務(wù)由JavaScript 委托給宿主環(huán)境進行執(zhí)行,當異步任務(wù)執(zhí)行完成后,會通知JavaScript 主線程執(zhí)行異步任務(wù)的回調(diào)函數(shù)。
同步任務(wù)和異步任務(wù)的執(zhí)行過程:
①同步任務(wù)由JavaScript 主線程次序執(zhí)行。
②異步任務(wù)委托給宿主環(huán)境執(zhí)行。
③已完成的異步任務(wù)對應(yīng)的回調(diào)函數(shù),會被加入到任務(wù)隊列中等待執(zhí)行。
④JavaScript 主線程的執(zhí)行棧被清空后,會讀取任務(wù)隊列中的回調(diào)函數(shù),次序執(zhí)行。
⑤JavaScript 主線程不斷重復上面的第4 步。
JavaScript 主線程從“任務(wù)隊列”中讀取異步任務(wù)的回調(diào)函數(shù),放到執(zhí)行棧中依次執(zhí)行。這個過程是循環(huán)不斷的,所以整個的這種運行機制又稱為EventLoop(事件循環(huán))。
import thenFs from ' then-fs '
console
log('A')
thenFs. readFile(' ./files/1.txt', 'utf8' ). then(dataStr => {
console.log('B')
})
setTimeout(( ) => {
console. log('C' )
},0)
console.log( 'D')
正確的輸出結(jié)果:ADCB。
其中:
A 和D 屬于同步任務(wù)。會根據(jù)代碼的先后順序依次被執(zhí)行。
C 和B 屬于異步任務(wù)。它們的回調(diào)函數(shù)會被加入到任務(wù)隊列中,等待主線程空閑時再執(zhí)行。
循環(huán)可以將代碼塊執(zhí)行指定的次數(shù)。
JavaScript 循環(huán)
如果您希望一遍又一遍地運行相同的代碼,并且每次的值都不同,那么使用循環(huán)是很方便的。
我們可以這樣輸出數(shù)組的值:
一般寫法:
document.write(cars[0] + "<br>");
document.write(cars[1] + "<br>");
document.write(cars[2] + "<br>");
document.write(cars[3] + "<br>");
document.write(cars[4] + "<br>");
document.write(cars[5] + "<br>");
使用for循環(huán)
for (var i=0;i<cars.length;i++)
{
document.write(cars[i] + "<br>");
}
不同類型的循環(huán)
JavaScript 支持不同類型的循環(huán):
for - 循環(huán)代碼塊一定的次數(shù)
for/in - 循環(huán)遍歷對象的屬性
while - 當指定的條件為 true 時循環(huán)指定的代碼塊
do/while - 同樣當指定的條件為 true 時循環(huán)指定的代碼塊
For 循環(huán)
for 循環(huán)是您在希望創(chuàng)建循環(huán)時常會用到的工具。
下面是 for 循環(huán)的語法:
for (語句 1; 語句 2; 語句 3)
{
被執(zhí)行的代碼塊
}
語句 1 (代碼塊)開始前執(zhí)行 starts.
語句 2 定義運行循環(huán)(代碼塊)的條件
語句 3 在循環(huán)(代碼塊)已被執(zhí)行之后執(zhí)行
實例
for (var i=0; i<5; i++)
{
x=x + "該數(shù)字為 " + i + "<br>";
}
從上面的例子中,您可以看到:
Statement 1 在循環(huán)開始之前設(shè)置變量 (var i=0)。
Statement 2 定義循環(huán)運行的條件(i 必須小于 5)。
Statement 3 在每次代碼塊已被執(zhí)行后增加一個值 (i++)。
語句 1
通常我們會使用語句 1 初始化循環(huán)中所用的變量 (var i=0)。
語句 1 是可選的,也就是說不使用語句 1 也可以。
您可以在語句 1 中初始化任意(或者多個)值:
實例:
for (var i=0,len=cars.length; i<len; i++)
{
document.write(cars[i] + "<br>");
}
同時您還可以省略語句 1(比如在循環(huán)開始前已經(jīng)設(shè)置了值時):
實例:
var i=2,len=cars.length;
for (; i<len; i++)
{
document.write(cars[i] + "<br>");
}
語句 2
通常語句 2 用于評估初始變量的條件。
語句 2 同樣是可選的。
如果語句 2 返回 true,則循環(huán)再次開始,如果返回 false,則循環(huán)將結(jié)束。
如果您省略了語句 2,那么必須在循環(huán)內(nèi)提供 break。否則循環(huán)就無法停下來。這樣有可能令瀏覽器崩潰。請在本教程稍后的章節(jié)閱讀有關(guān) break 的內(nèi)容。 |
語句 3
通常語句 3 會增加初始變量的值。
語句 3 也是可選的。
語句 3 有多種用法。增量可以是負數(shù) (i--),或者更大 (i=i+15)。
語句 3 也可以省略(比如當循環(huán)內(nèi)部有相應(yīng)的代碼時):
實例:
var i=0,len=cars.length;
for (; i<len; )
{
document.write(cars[i] + "<br>");
i++;
}
for/In 循環(huán)
JavaScript for/in 語句循環(huán)遍歷對象的屬性:
實例
var person={fname:"John",lname:"Doe",age:25};
for (x in person)
{
txt=txt + person[x];
}
您將在有關(guān) JavaScript 對象的章節(jié)學到更多有關(guān) for / in 循環(huán)的知識。
While 循環(huán)
我們將在下一章為您講解 while 循環(huán)和 do/while 循環(huán)。
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
文來源:微信公眾號:Node地下鐵 作者: 冰森
出處:https://mp.weixin.qq.com/s/OudqDff3QvmBqIiD74LrTw
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。