我想知道我的OpalRB(Ruby-to-JavaScript编译器)项目中的某些内容:当您在Opal中创建常量时,如下所示:

ONE = 1


...与说这是JavaScript本质上是一样的吗?:

const ONE = 1;


我问这个问题的原因是JS中的const关键字并非总是在每个浏览器中都得到正确支持,因此,我对在Opal中使用常量有些警惕。

最佳答案

...与说这是JavaScript本质上是同一回事吗?


不,这不对。 JavaScript中的const产生一个变量,该变量将忽略所有重新分配并保留其原始值。在Ruby中,常量在重新分配时会发出警告,但实际上确实会重新分配。

这是Opal如何在Ruby中编译ONE=1的方法:

$opal.cdecl($scope, 'ONE', 1);


如您所见,常量没有像局部变量那样存储为变量,而是存储在范围对象内部。

如果已声明cdecl,则ONE函数可以执行所需的任何操作。但是,Opal的开发人员似乎选择在重新分配常量时不显示警告。尝试this(浏览此网页并查看编译器的工作原理总是很有趣)。

因此,Opal编译的Ruby中的常量不是。

10-08 08:40