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