0

Сегодня я читал harmony:proper_tail_calls предложение, и я заметил, что в references была ссылка гласивший, “ Brendan discovers that ES5/strict enables TCO.Как правильно включить хвостовые звонки в режиме ES5/strict?

Что это означает, что ES5/строги “ ” позволяет TCO? Сначала я подумал, что первоначальные реализации правильных хвостовых вызовов доступны в режиме ES5/strict. Тем не менее, это явно не так, как показывают эти контрольные показатели:

  1. ES5/strict TCO (n = 10000).
  2. ES5/strict TCO (n = 1000).

Я использовал следующие две функции в указанных выше тестах:

function without_tco(x) { 
    if (x === 0) return x; 
    return without_tco(x - 1); 
} 

function with_tco(x) { 
    "use strict"; 
    if (x === 0) return x; 
    return with_tco(x - 1); 
} 

Во всяком случае, мой вопрос: как собственно хвост вызывает “ ” включен в ES5/строгом режиме?

ответ

2

Это означает, что строгий режим делает звонки в правильном положении хвоста гарантированно реализуемыми как хвостовые звонки, поскольку он запрещает все, что может помешать этой оптимизации; а именно, что функцию строгого режима невозможно получить через свойство caller. Это не означает «позволяет» в том смысле, что Firefox уже реализовал его.