很多时候我需要对一个变量进行delcare,只是为了一个真实的if语句。 例如:
let entry;
entry = entries.find(....);
if (entry) {
// use entry
}
// i dont need entry here
我尝试了类似于for (let i=0; ...)
的组合:
if (let entry = entries.find(....)) {
// user entry
}
但它不起作用。如果我使用var
而不是let
它可以工作,但它提升的变量因此不限于if语句块。
答案 0 :(得分:5)
由于let
创建了一个块作用域,因此需要在其周围创建另一个块以限制其作用域。
块语句用于对零个或多个语句进行分组。该块由一对花括号分隔。
let x = 1;
{
let x = 2;
}
console.log(x); // logs 1
或者,您可以使用立即调用的函数表达式:
(function () {
let entry = 6;
if (entry) {
console.log(entry);
}
})()
// Variable entry is not accessible from the outside scope
答案 1 :(得分:4)
这可能是一个从未为JS做过的成语,但只是为了踢,这里可以使用的助手,虽然另一个答案可能更正确。这是受到Clojure when-let
的启发,它正是您正在寻找的,但它不需要功能,因为它是一个宏:
function ifDo (maybeTrueVal, doF) {
if (maybeTrueVal) {
doF(maybeTrueVal);
}
}
ifDo(entries.find(....), (truthyVal) => {
console.log(truthyVal);
});