【发布时间】:2019-05-17 21:49:00
【问题描述】:
我遇到了以下代码,它非常简单,因为它旨在确定变量是否为字符串。
const is_string = value => {
return typeof value() === 'string';
};
let example = 'Hello, world!';
console.log(is_string(() => example)); // true
我的困惑与输入参数的使用有关。特别是参数后面带括号的第二行:value() 和调用函数的方式:is_string(() => example)。后者本身看起来就像一个箭头函数。
我重写了类似的代码
const is_string = (value) => {
return typeof value === 'string';
};
let example = 'Hello, world!';
console.log(is_string(example)); // true
它的作用几乎相同,那么使用第一个代码的符号的真正区别/优势是什么?在特定情况下有用吗?
提前致谢。
版本:
本次讨论的关键词是Lambda 表达式。我不完全知道代码将函数作为输入参数传递,我不熟悉这种表示法。
【问题讨论】:
-
在某些情况下它当然很有用,但是在这个情况下呢?嗯,有疑问。请注意,您的 sn-p 不能抛出错误,因此不需要 try catch。
-
第一个从字面上测试作为参数传入的函数的返回类型是否为字符串,而不是传入的参数是否为字符串,这是第二个测试的内容。这些是完全不同的。
-
第一个函数似乎是一种模式的部分实现,为了灵活性,函数可以接受一个值或返回一个值的 lambda。例如它本来可以做到的:
return typeof (typeof value === 'function' ? value() : value)在目前的形式下,它看起来没什么用。 -
接受一个函数作为参数通常是一种相对普遍的做法,但接受一个唯一目的是返回一个您检查类型的值?这……很奇怪。我看不出它在测试框架之外是有用的......即使那样......
-
感谢@AteşGöral 为您提供的所有 cmets,您帮助我理解了这都是关于 lambda 表达式的。现在我将进一步研究。
标签: javascript ecmascript-6 arrow-functions