成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

8個(gè)開發(fā)者必須知道的JavaScript深層概念

譯文
開發(fā)
深入了解你可能不知道的JavaScript概念

  作者丨Alexander Hafemann

  譯者 | 布加迪

  用JavaScript編寫第一段代碼可能需要一天左右的時(shí)間,但深入了解其未知知識(shí)和背景知識(shí)可能讓你在整個(gè)職業(yè)生涯受益無(wú)窮!

作用域(scope)

  簡(jiǎn)而言之,作用域就是“你可以在代碼中訪問聲明的地方”。

  我們有兩種作用域:全局作用域和局部作用域,區(qū)別在于你可以在代碼的任何地方訪問全局作用域,但局部作用域在塊內(nèi)聲明,所以你只能在塊內(nèi)訪問它們。

  注意,var關(guān)鍵字在變量提升部分中的表現(xiàn)可能略有不同。

{
// Local scope and correct
const access_inside_block = 'test';
console.log(access_inside_block);
}
// Error, you can't access the variable here
// You're not in the scope
console.log(access_inside_block);

變量let和const的區(qū)別

  現(xiàn)在我們知道了什么是作用域,所以可以猜測(cè)這里最大的區(qū)別之一就是這些關(guān)鍵字的作用域。

圖片

圖1.圖中所示的表比較了這些關(guān)鍵字

變量提升(hoisting)

  你可能經(jīng)常聽到這個(gè)詞!但這到底是什么呢?簡(jiǎn)而言之,變量提升是JavaScript中的一種機(jī)制,一些聲明在執(zhí)行之前執(zhí)行該機(jī)制;比如冒泡,JS引擎會(huì)把它們提升到首位,并聲明它們的位置在其他之前,比如用于變量聲明的var關(guān)鍵字;用var引入的變量可以在賦值之前被調(diào)用,你會(huì)得到undefined的結(jié)果,或者用function關(guān)鍵字聲明的函數(shù)可以在JavaScript中聲明之前被調(diào)用。

foo();
function foo() {
// Your function code
}

IIFE

  這個(gè)短語(yǔ)代表“立即調(diào)用的函數(shù)表達(dá)式”,這意味著聲明一經(jīng)定義就運(yùn)行的函數(shù),允許將變量和函數(shù)設(shè)為私有,并確保循環(huán)中的異步代碼被正確執(zhí)行。

(function () {
// …
})();

柯里化(Curring)

  這是一種處理JavaScript函數(shù)的高級(jí)技術(shù),它實(shí)際上轉(zhuǎn)換函數(shù),讓你可以在不同的步驟中向函數(shù)傳遞參數(shù),并使其在不同的步驟中可以調(diào)用。

function curry(f) {
// curry(f) does the currying transform
return function(a)
{
return function(b)
{
return f(a, b);
};
};
}
// usage
function sum(a, b) {
return a + b;
}
let curriedSum = curry(sum);
alert( curriedSum(1)(2) );
// 3

異步

  在討論事件循環(huán)和web worker方面的內(nèi)容之前,我們應(yīng)該弄清楚對(duì)JavaScript而言的異步是什么,以及當(dāng)JavaScript是單線程語(yǔ)言時(shí),它是如何處理的!

  JavaScript是一種單線程同步編程語(yǔ)言,它本身不支持多線程或異步模式,但是借助瀏覽器(瀏覽器API)和JavaScript底層的某種機(jī)制,我們可以擁有異步JavaScript!

圖片

圖2

  上圖確切地說明了JavaScript引擎和我們從瀏覽器獲得的Web API所發(fā)生的事情,不妨解釋一下。

  JavaScript有一個(gè)名為“調(diào)用堆棧”(Call Stack)的簡(jiǎn)單列表,它逐一管理任務(wù)(堆棧算法),但是當(dāng)異步任務(wù)被傳遞時(shí),JavaScript會(huì)把它彈出到web API,瀏覽器就會(huì)處理它;比如setTimeout API,當(dāng)異步對(duì)象的結(jié)果準(zhǔn)備好時(shí),瀏覽器會(huì)通過底層的某種機(jī)制把它調(diào)回到堆棧中。

事件循環(huán)

  還記得上面我告訴過你,異步對(duì)象在后臺(tái)完成后會(huì)返回到調(diào)用堆棧中嗎?處理這一機(jī)制的部分被稱為“事件循環(huán)”。

  事件循環(huán)會(huì)不斷檢查調(diào)用堆棧,如果里面沒有任務(wù)而且是空閑的,它會(huì)按優(yōu)先級(jí)把對(duì)象推送到調(diào)用堆棧中。

圖3

回調(diào)和微任務(wù)隊(duì)列

  想象一下,有兩個(gè)異步任務(wù)在同一秒內(nèi)完成,它們都剛剛從web API返回,那么哪一個(gè)會(huì)先被推送到回調(diào)?

  JavaScript對(duì)此有一個(gè)機(jī)制,它將回調(diào)請(qǐng)求分為兩個(gè)部分:微任務(wù)和宏任務(wù)。

圖片

圖4

  宏任務(wù)隊(duì)列在計(jì)時(shí)器到期后從setTimeout() API獲得普通的回調(diào)函數(shù)。

  宏任務(wù)的優(yōu)先級(jí)低于用于將回調(diào)函數(shù)獲取到事件循環(huán)的微任務(wù)隊(duì)列。

  微任務(wù)隊(duì)列通過承諾(Promises)和變異觀察者(Mutation Observer)獲取回調(diào)函數(shù)。

  原文鏈接:

  ??https://javascript.plainenglish.io/javascript-deep-concepts-you-should-know-dde14aafd8d2??

  ??https://javascript.plainenglish.io/javascript-deep-concepts-you-should-know-8965d4e409d3??

責(zé)任編輯:張潔 來源: 51CTO技術(shù)棧
相關(guān)推薦

2013-04-02 09:23:37

2014-09-01 09:53:50

Android框架

2023-06-26 23:32:11

人工智能Chat GPT工具

2010-07-28 14:21:43

Flex

2014-08-08 13:27:34

Android LAndroid開發(fā)

2013-07-18 09:42:23

2011-05-11 15:28:05

2022-04-27 09:48:56

JS前端開發(fā)

2015-03-31 09:40:23

移動(dòng)開發(fā)開發(fā)工具APP

2025-06-20 00:00:00

大模型AISpring

2017-04-17 21:33:01

前端開發(fā)javascript嚴(yán)格模式

2020-03-19 15:30:08

JavaScript數(shù)組字符串

2015-08-11 11:01:22

設(shè)計(jì)原則開發(fā)者

2022-06-08 10:42:34

ReduceJavaScript技巧

2023-05-11 16:29:39

Javascript開發(fā)前端

2022-12-14 07:31:35

JavaScript錯(cuò)誤關(guān)鍵字

2010-04-12 14:58:56

Meego開發(fā)

2022-10-20 15:12:43

JavaScript技巧開發(fā)

2010-05-04 08:58:02

.NET

2018-04-08 10:08:43

開發(fā)人員工具
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品一区二区久久久久 | 免费三级网 | 午夜在线小视频 | 亚洲欧美综合精品久久成人 | 黄在线免费观看 | av在线黄 | 久久99精品久久久久久国产越南 | 久久视频免费观看 | 欧美精品啪啪 | 亚洲精品91 | 免费看黄色视屏 | 91视频大全 | 国产精品视频二区三区 | 日韩中文字幕一区 | 性国产xxxx乳高跟 | 欧美精品久久 | 2018天天干天天操 | 成人免费在线小视频 | 一区亚洲| h视频在线观看免费 | 一起操网站 | 亚洲成人三级 | 91精品国产综合久久婷婷香蕉 | 午夜精品一区二区三区在线 | 天天射美女 | 一区二区免费高清视频 | 亚洲国产精选 | 国产成人99久久亚洲综合精品 | 一区二区三区免费 | 欧美精品一区二区在线观看 | 伊人伊成久久人综合网站 | 国产欧美日韩一区二区三区在线 | 成人精品一区二区三区中文字幕 | 亚洲精品影院 | 久久久久91| 91操操操| 国产高清精品一区二区三区 | 欧美黄色大片在线观看 | 久久婷婷色| 91文字幕巨乱亚洲香蕉 | 99免费视频 |