【发布时间】:2020-04-25 01:25:48
【问题描述】:
在调用具有特定名称的函数之前,我想声明它(使用后备定义),如果它不存在:
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.');
这是推荐的方法吗?还是我错过了一些更传统的东西?
NB 我怎么可能不知道这个特定的功能是否已经定义(let、const 或 var)?
因为我正在对用户生成的脚本进行后处理,该脚本可能包含也可能不包含该函数定义,并且需要:
- 如果尚未定义,则提供回退;或
- 如果是,什么也不做
【问题讨论】:
-
三元运算符呢?
let fun = typeof fun !== 'undefined' ? fun : () => console.log('fun() not defined'); -
在同一个脚本中不能有两个以
let fun开头的语句。请注意,用户可能已经声明了fun。这是一个陷阱,以防他们没有。 -
@Rounin 啊,你是对的,我不知道我在想什么。我建议的形式的三元运算符根本不起作用>.
-
别担心,@Sebastian。我经历了完全相同的思考过程,尝试了完全相同的事情并获得了完全相同的顿悟。
-
我正在对用户编写的脚本进行后期处理。他们可以明确声明:我的回调名称为
myCustomCallbackz,但他们没有义务这样做。如果他们省略了这样一个明确的声明,他们的回调将被假定为myCallback。如果他们不确认他们的回调具有自定义名称并且他们也没有定义myCallback,那么myCallback将需要以某种方式定义或脚本解析器将遇到错误并停止。
标签: javascript function ecmascript-6 variable-assignment