通常,我看到一个函数的默认值为“静态”或“恒定”值,并且不是由另一个函数调用生成的。
我的意思示例:
function test(num = 10) {
// code ...
}
我有以下示例。 这个设计好还是不好?
function test(num = randomNumber()) {
// code ...
}
替代方法如下。
function test(num) {
if (num === undefined) {
num = randomNumber()
}
// code ...
}
答案 0 :(得分:0)
function test(num = randomNumber()) {
// code ...
}
和
function test(num) {
if (num === undefined) {
num = randomNumber()
}
// code ...
}
即使它们产生相同的结果,也不相等,因为第一个给出了方法重载的概念 就像您可以在案例中调用test()和test(5)一样,test()仅处理randomNumber()。无论哪种情况,休息都取决于您对纯函数和不纯函数的选择。
答案 1 :(得分:0)
输入
function test(num = randomNumber()) {
// code ...
}
编码为BabelJS会产生以下结果:
"use strict";
function test(num) {// code ...
if (num === void 0) {
num = randomNumber();
}
}
因此,初始代码和您提供的替代代码几乎等效。如果我们假设浏览器中ES6的正确实现,那只是样式上的事情。在某些非常老旧或非常有限的浏览器中,参数默认值根本无法使用,但这不是将函数调用用作参数默认值的问题。
在极端数据保存模式下,根本不支持ES6,因此,如果您使用OperaMini,则需要确保避免使用ES6功能。在这里您可以看到一个兼容性表:https://kangax.github.io/compat-table/es6/