if
条件放在第一括号内会导致错误:
function fd(t) {
let output = '';
if (t >= 41) {
let mns = 45
(mns === 1) ? (output = "true") : (output = "false");
}
return output;
}
console.log(fd(65));
错误消息:“ ReferenceError:无法访问词法声明'mns' 初始化之前”
if
条件没有第一个括号就可以了:
function fd(t) {
let output = '';
if (t >= 41) {
let mns = 45
mns === 1 ? (output = "true") : (output = "false");
}
return output;
}
console.log(fd(65));
有人可以向我解释这种行为吗?
答案 0 :(得分:2)
您在let mns = 45
之后缺少分号来结束该语句。没有分号来结束该语句,就好像试图将(mns === 1)
作为参数传递给let
语句一样。好像这两行合并为一个:let mns = 45(mns === 1) ? (output = "true") : (output = "false");
第二个功能起作用是因为msn === 1
周围没有括号,因此它不会尝试将其作为参数传递给let
语句。
通常,请始终记住在每个 JavaScript语句之后添加分号。
function fd(t) {
let output = '';
if (t >= 41) {
let mns = 45;
(mns === 1) ? (output = "true") : (output = "false");
}
return output;
}
console.log(fd(65));
正如Xufox在评论中建议的那样,您可以将三元运算符移至return语句,以避免产生歧义。
function fd(t) {
let mns;
if (t >= 41) {
mns = 45;
}
return (mns === 1) ? ("true") : ("false");
}
console.log(fd(65));
答案 1 :(得分:1)
发生这种情况是因为let
声明尚未结束。要结束声明,请使用;
或声明为var
而不是let。
function fd(t) {
let output = '';
if (t >= 41) {
let mns = 45; // note the semicolan or declare it as var
(mns === 1) ? (output = "true") : (output = "false");
}
return output;
}
console.log(fd(65));