第 1 部分:加強(qiáng)您對(duì)核心 JavaScript 概念的理解
在本文中,我們將看到一些用于預(yù)熱和加強(qiáng)您的 JavaScript 核心概念的腳本問題。
我們將其作為一個(gè)系列開始,您可以在其中找到不同的問題列表及其解決方案。
讓我們從一些驚人的問題開始。
問題 1:以下代碼的輸出是什么?
提示:這是一個(gè)閉包函數(shù)
輸出:
bar() 表示 foo 中定義的“閉包函數(shù)”。
“閉包總是記住它的詞匯范圍。
“a”的值始終由 bar() 維護(hù)和引用;
而對(duì)于“b”,它總是在函數(shù)調(diào)用時(shí)初始化并保持相同。
因此,每次調(diào)用函數(shù)時(shí),它將初始化為1。
問題 2
提示:這是一個(gè) IIFE 函數(shù)
輸出:
IIFE是一個(gè)獨(dú)立的函數(shù),對(duì)于它來說,“這”將是一個(gè)全局變量。
所以輸出是:
問題 3:為下面的給定代碼示例實(shí)現(xiàn)代碼。
(使 calc 具有這些給定函數(shù),這些函數(shù)將返回總計(jì)作為給定操作的值)
提示:您可以創(chuàng)建一個(gè)可重用的函數(shù),而無需將函數(shù)相互嵌套。
溶液
問題 4:以下代碼的輸出是什么?
提示:“x”將在2秒后為假,直到設(shè)置間隔可以執(zhí)行。
輸出:
因?yàn)橛?jì)數(shù)器將遞增 200 毫秒。因此,在條件變?yōu)榧僦埃瑢⑿枰?000毫秒。因此,它將總共打印9次= 1800ms(每次200ms),最后一次,在2000ms時(shí),條件將為假。
問題 5:以下代碼的輸出是什么?
提示:在 JavaScript 中稱為吊裝
注意:對(duì)于那些不熟悉JavaScript中的提升的人來說,根據(jù)MDN,提升“是指解釋器在執(zhí)行代碼之前似乎將函數(shù),變量或類的聲明移動(dòng)到其范圍頂部的過程。
起重示例
輸出:
它既不是20也不是21,而是未定義的。
在這里,我們希望將x的值指定為20,但在分配之前,它將被提升并且var的默認(rèn)值未定義。
你們中的許多人可能會(huì)問它是var,既然它具有全局訪問權(quán)限并且x是全局21,那么為什么它不記錄為21?
這背后的原因是如果你刪除x = 20;從 fun1() ,那么它將不再被吊起。因此,它將記錄為 21。
但是,我們宣布它為全球21,但我們?nèi)匀粚⑵涞跹b在fun1()中。這就是為什么默認(rèn)情況下它被吊裝為未定義的原因。
希望以上的內(nèi)容能夠幫助JavaScript開發(fā)人員更深入地了解核心概念并幫助溫習(xí)高級(jí)概念。