Javascript 为什么“拒绝访问”总是发出警报

Javascript 为什么“拒绝访问”总是发出警报,javascript,Javascript,我有一个代码可以检查你是否18岁: let age = prompt("How old are you?") function chk(age) { age = (age > 18) ? alert("Access allowed") : alert("Access denied"); } chk() if (age < 18) { let c = confirm("Are your parent all

我有一个代码可以检查你是否18岁:

let age = prompt("How old are you?")

function chk(age) {
  age = (age > 18) ? alert("Access allowed") : alert("Access denied");
}
chk()
if (age < 18) {
  let c = confirm("Are your parent allowed?");
  if (c) {
    alert("ok")
  } else {
    alert("than bye")
  }
} else {
  alert("Bye")
}
但由于某些原因,访问总是被拒绝。为什么?

您调用chk函数时没有传递age参数,这意味着age在函数中未定义,现在undefined>18将始终为false,因此访问被拒绝的警报

您可以使用chkage来防止上述问题

let age = prompt("How old are you?")

function chk(age) {
    (age > 18) ?  alert("Access allowed") : alert("Access denied"); // you don't have to reassign since alert does not return any value
}
chk(age);

if (age < 18) {
 //.. remaining code
}

这不是对您的问题的直接回答,而是一种不涉及任何变量的编写代码的替代方法。我还简化了if子句结构,因为有两个no分支有效地导致了相同的结果。在我的if子句中,OR运算符| |将导致仅在不满足第一个条件age>18时调用confirm函数

如果提示,您多大了?>18 ||确认您未成年。\n您的父母是否同意?{ alertok //在此处为授权用户执行所有代码 }否则{ 再见,再见
}调用函数chkage时没有参数,用JS术语表示,参数未定义。因此,chkundefined将尝试比较undefined>18,这是错误的,因此它将发出警报“访问被拒绝”;请落选者解释一下他们为什么落选?
let age = prompt("How old are you?")

function chk() { //without the age parameter, now the global age variable will be used inside the function
    (age > 18) ?  alert("Access allowed") : alert("Access denied"); // DO NOT reassign age in this case, as the global age would be rewritten
}
chk()
    if (age < 18) {
        let c = confirm("Are your parent allowed?");
        if (c) {
            alert("ok")
        } else {
            alert("than bye")
        }
    }else {
        alert("Bye")
    }