为什么在ruby循环中var起作用但const不起作用?

时间:2018-12-31 13:35:01

标签: javascript ruby-on-rails

我正在尝试切换每个未标记的任务。 可行,

<% @untagged.each do |task| %> 
    var task_id = <%= task.id %>;
    $(`#${task_id}`).fadeToggle();
<% end %>

但是,很奇怪,事实并非如此。

<% @untagged.each do |task| %> 
    const task_id = <%= task.id %>;
    $(`#${task_id}`).fadeToggle();
<% end %>

据我了解,每个循环都会创建一个新块。常量声明将嵌套在每个这些块中,因此不会有任何重新声明。那么为什么第二个示例不起作用?

提前谢谢!

1 个答案:

答案 0 :(得分:3)

您的代码做什么?

对于@untagged中的每个元素,它都会生成以下代码行:

const task_id = FOO;
$(`#${task_id}`).fadeToggle();

,其中FOO替换为元素ID。假设@untagged看起来像这样:[<#Task @id = 23>, <#Task @id = 24>],那么生成的代码将看起来像这样:

const task_id = 23;
$(`#${task_id}`).fadeToggle();
const task_id = 42;
$(`#${task_id}`).fadeToggle();

在ECMAScript中,const蚂蚁只能被声明和分配一次,因此,您会遇到静态错误。这就是常量在ECMAScript中的工作方式,与根本没有任何关系。