1

I'm wondering about something in a project of mine with OpalRB (the Ruby-to-JavaScript compiler): when you make a constant in Opal, like so:

ONE = 1

... is that essentially the same thing as saying this is JavaScript?:

const ONE = 1;

The reason that I ask this question is that the const keyword in JS in not always properly supported in each browser and, due to that, I'm somewhat wary about using constants with Opal.

4

1 回答 1

1

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

不,这不对。const在 JavaScript 中创建一个忽略任何重新分配并保持其原始值的变量。在 Ruby 中,常量在重新分配时会发出警告,但实际上确实会被重新分配。

以下是 ONE=1Opal 编译 Ruby 的方式:

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

如您所见,常量不像局部变量那样存储为变量,它们存储在范围对象内部。

如果已经声明,该cdecl函数可以做它想做的任何事情。ONE然而,Opal 的开发人员似乎选择在重新分配常量时不显示警告。试试这个(玩这个网页总是很有趣,看看编译器是如何工作的)。

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

于 2014-09-07T22:29:06.813 回答