我想知道我的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中的常量不是。