Dart的箭头函数方法语法是否存在运行时差异?和JS表现是否一致?
Dart类方法两种简写的等价性说明
你给出的Dart示例中,m1和m2在运行时完全等价,和JavaScript里的两种差异写法本质不同。
- Dart中的
=>是函数声明的通用语法糖,等价于{ return 表达式; },仅用于简化代码写法,不会改变函数的存储、调用逻辑,在类方法、顶层函数、局部函数的声明中都可以使用。 - 示例中的
m1和m2都属于标准的Dart类实例方法,统一存储在类的方法表中,不会在每个实例中单独生成副本,二者的内存占用、调用性能、运行行为没有任何区别。 - 如果要在Dart中实现JavaScript里
m2那种每个实例单独存储函数副本的效果,需要写成实例字段赋值的形式,代码如下:
class A { // 普通类方法,存储在类方法表,所有实例共享 int m1() { return 123; } // 实例函数字段,每个实例单独存储一份副本 final int Function() m2 = () => 123; }
这种写法的m2才会和JS中的同名写法行为类似,常规业务场景下使用普通类方法的性能表现会更优。
内容的提问来源于stack exchange,提问作者Paleo
相关产品推荐
相关产品推荐

