除了在 if 语句块中使用 let 定义一个尚未定义的变量之外,还有什么替代方法?
What's the alternative to defining an as-yet-undefined variable with let inside an if-statement block?
在调用具有特定名称的函数之前,我想立即声明它(使用后备定义),如果它不存在:
if (typeof myFunction === 'undefined') {
let myFunction = () => console.log('Warning: myFunction() has not been defined.');
}
myFunction();
但是,当然,let
具有块范围,因此尽管在 if statement
中给 myFunction()
一个回退定义,myFunction()
在 if 语句块之外保持未定义。
最简单的解决方案是使用 var
(没有块作用域)而不是 let
:
var myFunction = () => console.log('Warning: myFunction() has not been defined.');
这是推荐的方法吗?还是我遗漏了一些更传统的东西?
N.B. 我怎么不知道这个特定的函数是否已经定义(或者用 let
、const
或 var
)?
因为我正在 post- 处理一个用户生成的脚本,它可能包含也可能不包含该函数定义并且需要:
- 如果还没有定义,提供后备方案;或
- 什么都不做,如果是
我会说你使用 var
的方法是你最好的选择 在这种非常非常特殊的情况下:
if (typeof myFunction === 'undefined') {
var myFunction = () => console.log('Warning: myFunction() has not been defined.');
}
myFunction();
同样,这是一个非常特殊的情况,可能是 var
剩下的极少数有效用例之一(可能 只有 一个)。当您不知道它是否已经定义或如何定义时,没有可靠的方法可以使用 let
(或 const
等)在范围内声明绑定(松散地,变量)。
唯一的其他半可行解决方案是只分配给它,但这将特定于全局范围,并且在严格模式下会失败。
var
就是我认为的答案。
使用typeof
检查变量是否已经定义,不关心未声明的变量。
然后,不要试图用自定义名称声明变量,只需用您自己选择的名称声明一个 new 变量,它将保存现有函数或回退函数,然后使用自己的变量调用函数:
{
const __the_callback = typeof myFunction == "function"
? myFunction
: function fallback() { console.log("warning …"); };
…
__the_callback();
}
只需确保 __the_callback
不会与用户选择的名称冲突。
在调用具有特定名称的函数之前,我想立即声明它(使用后备定义),如果它不存在:
if (typeof myFunction === 'undefined') {
let myFunction = () => console.log('Warning: myFunction() has not been defined.');
}
myFunction();
但是,当然,let
具有块范围,因此尽管在 if statement
中给 myFunction()
一个回退定义,myFunction()
在 if 语句块之外保持未定义。
最简单的解决方案是使用 var
(没有块作用域)而不是 let
:
var myFunction = () => console.log('Warning: myFunction() has not been defined.');
这是推荐的方法吗?还是我遗漏了一些更传统的东西?
N.B. 我怎么不知道这个特定的函数是否已经定义(或者用 let
、const
或 var
)?
因为我正在 post- 处理一个用户生成的脚本,它可能包含也可能不包含该函数定义并且需要:
- 如果还没有定义,提供后备方案;或
- 什么都不做,如果是
我会说你使用 var
的方法是你最好的选择 在这种非常非常特殊的情况下:
if (typeof myFunction === 'undefined') {
var myFunction = () => console.log('Warning: myFunction() has not been defined.');
}
myFunction();
同样,这是一个非常特殊的情况,可能是 var
剩下的极少数有效用例之一(可能 只有 一个)。当您不知道它是否已经定义或如何定义时,没有可靠的方法可以使用 let
(或 const
等)在范围内声明绑定(松散地,变量)。
唯一的其他半可行解决方案是只分配给它,但这将特定于全局范围,并且在严格模式下会失败。
var
就是我认为的答案。
使用typeof
检查变量是否已经定义,不关心未声明的变量。
然后,不要试图用自定义名称声明变量,只需用您自己选择的名称声明一个 new 变量,它将保存现有函数或回退函数,然后使用自己的变量调用函数:
{
const __the_callback = typeof myFunction == "function"
? myFunction
: function fallback() { console.log("warning …"); };
…
__the_callback();
}
只需确保 __the_callback
不会与用户选择的名称冲突。