Javascript 什么';在if语句块中使用let定义尚未定义的变量的替代方法是什么?

Javascript 什么';在if语句块中使用let定义尚未定义的变量的替代方法是什么?,javascript,function,ecmascript-6,variable-assignment,Javascript,Function,Ecmascript 6,Variable Assignment,在使用某个名称调用函数之前,我想声明它(使用回退定义),如果它不存在的话: if(myFunction的类型=='undefined'){ 让myFunction=()=>console.log('警告:myFunction()尚未定义'); } myFunction()我想说,在这种非常非常特殊的情况下,您使用var的方法是您的最佳选择: if(myFunction的类型=='undefined'){ var myFunction=()=>console.log('警告:myFunctio

在使用某个名称调用函数之前,我想声明它(使用回退定义),如果它不存在的话

if(myFunction的类型=='undefined'){
让myFunction=()=>console.log('警告:myFunction()尚未定义');
}

myFunction()
我想说,在这种非常非常特殊的情况下,您使用
var
的方法是您的最佳选择

if(myFunction的类型=='undefined'){
var myFunction=()=>console.log('警告:myFunction()尚未定义');
}

myFunction()使用
typeof
检查变量是否已定义,这与未声明的变量无关

然后,与其尝试使用自定义名称声明变量,不如使用您自己选择的名称声明一个新变量,该变量将保存现有函数或回退函数,然后使用该变量调用函数:

{
  const __the_callback = typeof myFunction == "function"
    ? myFunction
    : function fallback() { console.log("warning …"); };

  …
  __the_callback();
}

只需确保
\u回调
不会与用户选择的名称冲突。

三元运算符如何<代码>让乐趣=乐趣的类型!='未定义的'?fun:()=>console.log('fun()未定义')
;同一脚本中不能有两个以
let fun
开头的语句。请注意,用户可能已经声明了
fun
。这是一个陷阱,以防他们没有。@Rounin啊,你是对的,我不知道我在想什么。我建议的形式的三元运算符根本不起作用>。不用担心,@Sebastian。我经历了完全相同的思考过程,尝试了完全相同的事情,获得了完全相同的顿悟。我正在对用户编写的脚本进行后期处理。他们可以明确声明:我的回调名为
myCustomCallbackz
,但他们没有义务这样做。如果他们省略了这样一个显式语句,那么他们的回调将被假定为
myCallback
。如果他们没有确认自己的回调具有自定义名称,并且他们也没有定义
myCallback
,则需要以某种方式定义
myCallback
,否则脚本解析器将出错并停止。感谢您的确认,@t.J.Crowder。现在我几乎从不使用
var
。当我在上面发现
var
有一个无法模仿的功能时,我不知道是沮丧还是高兴。@Rounin-LOL。鼓起勇气,模块将使最后剩下的用例变得越来越罕见……:-)杰出的。确实做得很好。你刚刚从@T.J.Crowder那里偷了一个绿色的记号。我对你们两位都很钦佩,也很感激,所以我会让你们两人在你们之间决一雌雄。