允许使用if语句的范围

Noi*_*art 7 javascript

很多时候我需要对一个变量进行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语句块.

Car*_*ate 6

这可能是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)


Kon*_*nst 5

由于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)