2 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
代碼工作的原因是因?yàn)閐oStuff直到調(diào)用它的主體才會(huì)執(zhí)行。由于doubleNumber碰巧在doStuff被調(diào)用之前定義,所以一切都很好,但是由于依賴倒置,linter 正確地將代碼識(shí)別為脆弱的。
僅當(dāng)您碰巧在調(diào)用doubleNumber時(shí)間之前沒(méi)有初始化時(shí)才會(huì)發(fā)生崩潰doStuff:
const doStuff = () => doubleNumber(4);
doStuff(); // ReferenceError: doubleNumber is not defined
const doubleNumber = number => number * 2;
這在這里似乎很明顯,但在更復(fù)雜的情況下可能不那么清楚。
constvslet應(yīng)該對(duì) linter 的輸出沒(méi)有影響,因?yàn)殡m然它們被提升了,但在初始化之前無(wú)法訪問(wèn)它們。
順序可以是任何你喜歡的,假設(shè)只有在依賴項(xiàng)可用時(shí)才進(jìn)行調(diào)用,但這并不是一個(gè)好主意(這正是 linting 應(yīng)該識(shí)別的)。

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
您的情況在Block 范圍變量的Typescript 文檔中進(jìn)行了描述(導(dǎo)航到該部分的最后一位)。
它說(shuō) :
您仍然可以在聲明之前捕獲塊范圍的變量。唯一的問(wèn)題是在聲明之前調(diào)用該函數(shù)是非法的。如果針對(duì) ES2015,現(xiàn)代運(yùn)行時(shí)會(huì)拋出錯(cuò)誤;但是,現(xiàn)在 TypeScript 是寬容的,不會(huì)將此報(bào)告為錯(cuò)誤。
給出的例子是
function foo() {
// okay to capture 'a'
return a;
}
// illegal call 'foo' before 'a' is declared
// runtimes should throw an error here
foo();
let a;
在您的情況下,doubleNumber正在被捕獲 inside doStuff,但doubleNumber之前已聲明doStuff,因此根據(jù)文檔是可以的,就像a文檔示例中的變量一樣。
添加回答
舉報(bào)