允许使用if语句的范围

时间:2017-02-20 15:29:19

标签: javascript

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

2 个答案:

答案 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);
});