我想知道OpalRB(Ruby-to-JavaScript编译器)在我的项目中的某些事情:当你在Opal中制作一个常量时,就像这样:
ONE = 1
...与说这是JavaScript基本上是一回事吗?:
const ONE = 1;
我问这个问题的原因是JS中的const
关键字并不总是在每个浏览器中得到适当的支持,因此,我对使用Opal的常量有些警惕。
答案 0 :(得分:1)
...与说这是JavaScript基本相同吗?
不,不是。 JavaScript中的const
生成一个忽略任何重新分配并保持其原始值的变量。在Ruby中,常量在重新分配时会发出警告,但实际上会重新分配。
以下是Ruby中ONE=1
如何通过Opal编译:
$opal.cdecl($scope, 'ONE', 1);
正如您所看到的,常量不是以局部变量的方式存储为变量,而是存储在范围对象内部。
如果已声明cdecl
,ONE
函数可以执行任何操作。然而,Opal的开发人员似乎选择在重新分配常量时不显示警告。试试this(玩这个网页总是很有趣,看看编译器是如何工作的。)
因此,Opal编译的Ruby中的常量不是。