最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2022年10月26日 11:50:16   作者:Young丶  
JavaScript有一個名為“調用堆棧”(Call Stack)的簡單列表,它逐一管理任務(堆棧算法),但是當異步任務被傳遞時,JavaScript會把它彈出到web API,瀏覽器就會處理它,這篇文章主要介紹了8個開發(fā)者必須知道的JavaScript深層概念,需要的朋友可以參考下

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

1. 作用域(scope)

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

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

注意,var關鍵字在變量提升部分中的表現(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);

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

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

圖中所示的表比較了這些關鍵字

圖1.圖中所示的表比較了這些關鍵字

3. 變量提升(hoisting)

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

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

4. IIFE

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

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

5. 柯里化(Curring)

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

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

6. 異步

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

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

圖片

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

JavaScript有一個名為“調用堆棧”(Call Stack)的簡單列表,它逐一管理任務(堆棧算法),但是當異步任務被傳遞時,JavaScript會把它彈出到web API,瀏覽器就會處理它;比如setTimeout API,當異步對象的結果準備好時,瀏覽器會通過底層的某種機制把它調回到堆棧中。

7. 事件循環(huán)

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

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

圖片

8. 回調和微任務隊列

想象一下,有兩個異步任務在同一秒內完成,它們都剛剛從web API返回,那么哪一個會先被推送到回調?

JavaScript對此有一個機制,它將回調請求分為兩個部分:微任務和宏任務。

圖片

宏任務隊列在計時器到期后從setTimeout() API獲得普通的回調函數(shù)。

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

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

到此這篇關于8個開發(fā)者必須知道的JavaScript深層概念的文章就介紹到這了,更多相關JavaScript深層概念內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • TBCompressor js代碼壓縮

    TBCompressor js代碼壓縮

    公司原先的JS和CSS文件都是用在線壓縮程序壓縮的,看似方便,但很容易出錯,可能是壓縮程序把CSS里面的一些Hack語句給混淆了,于是我決定用大名鼎鼎的YUI compressor。
    2011-01-01
  • 頁面點擊小紅心js實現(xiàn)代碼

    頁面點擊小紅心js實現(xiàn)代碼

    有時候我們經(jīng)常看到有些blog出現(xiàn)一些點擊頁面出現(xiàn)小紅心的效果,很是喜歡,這里就為大家分享一下代碼直接引用即可
    2018-05-05
  • ExtJs中gridpanel分組后組名排序實例代碼

    ExtJs中gridpanel分組后組名排序實例代碼

    這篇文章主要介紹了ExtJs中gridpanel分組后組名排序實例代碼,有需要的朋友可以參考一下
    2013-12-12
  • Javascript 個人筆記(沒有整理,很亂)

    Javascript 個人筆記(沒有整理,很亂)

    Javascript 個人筆記(沒有整理,很亂)...
    2007-07-07
  • JS前端千萬級彈幕數(shù)據(jù)循環(huán)優(yōu)化示例

    JS前端千萬級彈幕數(shù)據(jù)循環(huán)優(yōu)化示例

    這篇文章主要為大家介紹了JS前端一千萬條彈幕數(shù)據(jù)循環(huán)優(yōu)化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • JavaScript截屏功能的實現(xiàn)代碼

    JavaScript截屏功能的實現(xiàn)代碼

    我覺得使用JS截圖的想法是非常荒謬的,首先JS沒有權限調用操作系統(tǒng)的截圖功能,其次,瀏覽器(BOM)也沒有提供相關的截圖接口,經(jīng)過一番折騰,有點思路了,下面通過實例代碼給大家簡單介紹下js 截屏功能的實現(xiàn)代碼,一起看看吧
    2017-07-07
  • 淺聊一下為什么能用RxJS取代Redux

    淺聊一下為什么能用RxJS取代Redux

    本文我們將和大家淺聊一下為什么能用RxJS取代Redux,RxJS 在現(xiàn)在的前端用比較少,但是 RxJS 作為響應式和函數(shù)式編程的集大成者,似乎被前端開發(fā)者遺忘,可能是學習難度大,可能是有更加方便的解決方案,需要的朋友可以參考下
    2024-02-02
  • Typescript中函數(shù)類型及示例詳解

    Typescript中函數(shù)類型及示例詳解

    這篇文章主要介紹了Typescript中函數(shù)類型,主要包括常見寫法、可選參數(shù),默認參數(shù)及剩余參數(shù),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • js實現(xiàn)登錄與注冊界面

    js實現(xiàn)登錄與注冊界面

    這篇文章主要為大家詳細介紹了js實現(xiàn)登錄與注冊界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • JS實現(xiàn)的檢驗身份證格式并輸出出生日期,年齡,性別,出生地示例

    JS實現(xiàn)的檢驗身份證格式并輸出出生日期,年齡,性別,出生地示例

    這篇文章主要介紹了JS實現(xiàn)的檢驗身份證格式并輸出出生日期,年齡,性別,出生地,涉及javascript字符串遍歷、運算、轉換等相關操作技巧,需要的朋友可以參考下
    2019-05-05

最新評論

内丘县| 晋中市| 聂拉木县| 慈溪市| 信丰县| 成都市| 临朐县| 乐山市| 大冶市| 阿坝县| 井陉县| 溧水县| 罗江县| 延长县| 五河县| 三都| 永吉县| 林口县| 沛县| 凤台县| 山西省| 西乌珠穆沁旗| 衡水市| 磐石市| 博野县| 江华| 宾阳县| 宜春市| 萝北县| 盈江县| 田林县| 贵港市| 周至县| 漳州市| 芮城县| 鹤峰县| 桂东县| 大埔县| 临湘市| 滦平县| 博罗县|