大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 2023比較難搞的Javascript閉包面試題

2023比較難搞的Javascript閉包面試題

更新時間:2022-12-08 10:30:10 來源:動力節(jié)點 瀏覽1262次

每一個JavaScript程序員都是必須知道閉包是什么,閉包是函數(shù)式編程的核心概念之一,是引用了一個函數(shù)作為域中變量的函數(shù),簡單來說就是函數(shù)A用到了B函數(shù)中的變量,那么函數(shù)A就是個閉包。在我們面試相關崗位的時候,是有很大幾率問到有關問題的,為此,大家也需要作出準備,這幾個閉包面試題,可以參考下,非常具有挑戰(zhàn)性的。

javascript閉包面試題

1. 范圍

有以下函數(shù) clickHandler,immediate和delayedReload:

let countClicks = 0;

button.addEventListener('click', function clickHandler() {

??countClicks++;

});

const result = (function immediate(number) {

??const message = `number is: ${number}`;

??return message;

})(100);

setTimeout(function delayedReload() {

??location.reload();

}, 1000);

這3個函數(shù)中哪個能夠訪問外部范圍變量?

答案:

  • clickHandler 能夠從外部作用域訪問變量 countClicks。
  • immediate 無法訪問外部作用域中的任何變量。
  • delayedReload 從全局作用域(也就是最外層作用域)中訪問全局變量 location。

2. 丟失的參數(shù)

下列代碼輸出什么:

(function immediateA(a) {

??return (function immediateB(b) {

????console.log(a); // => ?

??})(1);

})(0);

 答案:

輸出為:0

用參數(shù) 0 調(diào)用 immediateA,因此 a 參數(shù)為 0。

immediateB 函數(shù)嵌套在 immediateA 函數(shù)中,是一個閉包,它從外部 immediateA 作用域中得到 a 變量,其中 a 為 0。因此 console.log(a) 的輸出為 0。

3. 誰是誰

下面的代碼將會輸出什么內(nèi)容?

let count = 0;

(function immediate() {

??if (count === 0) {

????let count = 1;

????console.log(count); // 輸出什么?

??}

??console.log(count); // 輸出什么?

})();

答案:

輸出 1 和 0

第一個語句 let count = 0 聲明了一個變量 count。

immediate() 是一個閉包,它從外部作用域得到 count 變量。在 immediate() 函數(shù)作用域內(nèi), count 是 0。

但是,在條件內(nèi),另一個 let count = 1 聲明了局部變量 count,該變量覆蓋了作用域之外的 count。第一個 console.log(count) 輸出 1。

第二個 console.log(count) 輸出為 0 ,因為這里的 count 變量是從外部作用域訪問的。

4. 棘手的閉包

下列代碼輸出什么:

for (var i = 0; i < 3; i++) {

??setTimeout(function log() {

????console.log(i); // => ?

??}, 1000);

}

答案:

輸出:3, 3, 3。

代碼分為兩個階段執(zhí)行。

階段1

for() 重復 3 次。在每次循環(huán)都會創(chuàng)建一個新函數(shù) log(),該函數(shù)將捕獲變量 i。 setTimout() 安排log() 在 1000 毫秒后執(zhí)行。

當 for() 循環(huán)完成時,變量 i 的值為 3。

階段2

第二階段發(fā)生在 1000ms 之后:

setTimeout() 執(zhí)行預定的 log() 函數(shù)。 log() 讀取變量 i 當前的值 3,并輸出 3

所以輸出 3, 3, 3。

5. 錯誤的信息

下面的代碼將會輸出什么:

function createIncrement() {

??let count = 0;

??function increment() { 

????count++;

??}

?

??let message = `Count is ${count}`;

??function log() {

????console.log(message);

??}

???

??return [increment, log];

}

?

const [increment, log] = createIncrement();

increment(); 

increment(); 

increment(); 

log(); // => ?

答案:

輸出:'Count is 0'

increment() 函數(shù)被調(diào)用 3 次,將 count 增加到 3。

message 變量存在于 createIncrement() 函數(shù)的作用域內(nèi)。其初始值為 'Count is 0'。但即使 count 變量已經(jīng)增加了幾次,message 變量的值也始終為 'Count is 0'。

log() 函數(shù)是一個閉包,它從 createIncrement() 作用域中獲取 message 變量。 console.log(message) 輸出錄'Count is 0'到控制臺。

以上就是2023比較難搞的五個Javascript閉包面試題,你能回答上來嗎?如果想要了解更多的Java面試題相關內(nèi)容,可以關注動力節(jié)點Java官網(wǎng)。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 国产人成激情视频在线观看 | 精品国产福利在线观看一区 | 欧美伦理一区二区三区 | 久青草影院在线观看国产 | 四虎影院免费在线播放 | 亚洲成人欧美 | 日韩色视频一区二区三区亚洲 | 日本a级精品一区二区三区 日本a毛片在线播放 | 中文字幕欧美日韩在线不卡 | 亚洲欧美国产精品 | 色综合天天综合网看在线影院 | 欧美日韩精品一区二区三区 | 国产午夜精品一二区理论影院 | 玖玖爱精品| 杨幂国产精品福利在线观看 | 爱操综合| 欧美黄色网页 | 波多野结衣国产精品 | 亚洲综合另类 | a毛片久久免费观看 | 色天使色婷婷丁香久久综合 | 久久国产成人精品麻豆 | 久久天天躁狠狠躁夜夜爽 | 色在线网 | 91在线激情在线观看 | 九九影院最新理论片 | 天天做天天干 | 在线观看日韩精品 | 国产一区二区三区四区在线观看 | 国产精品第页 | 伊人久久综在合线亚洲91 | 91热久久免费频精品动漫99 | 99久久综合狠狠综合久久aⅴ | 成人香蕉| 欧美韩国日本在线 | 一区二区三区四区国产 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 九九久久九九久久 | 久久777国产线看观看精品卜 | 九九九九精品视频在线播放 | 免费男女网站 |