2015-12-07 2 views
7

Мы попытались порт следующего кода ES6:Transpiled код генерирует ошибку, когда маскирующий параметр с переменным объектом

function apitest(data) { 
 
    data.cb(true); 
 
} 
 

 
function test(cb) { 
 
    apitest({cb: function(data) { 
 
     commit(cb,data); 
 
    }}); 
 

 
    function commit(cb,data) { 
 
     cb(data); 
 
    } 
 
} 
 

 
test(data => { 
 
    document.write(data); 
 
});

Это может выглядеть немного странно, но это не то, что мы ожидать (вернуть true) и не вызывать ошибок.

Однако Бабель transpiles его:

"use strict"; 
 

 
function apitest(data) { 
 
    data.cb(true); 
 
} 
 

 
function test(_cb) { 
 
    apitest({ cb: function cb(data) { 
 
      commit(_cb, data); 
 
     } }); 
 

 
    function commit(_cb, data) { 
 
     cb(data); 
 
    } 
 
} 
 

 
test(function (data) { 
 
    document.write(data); 
 
}); 
 

 
//# sourceMappingURL=test4.js.map

Этот код не удается, так как cb() называется внутри commit() не имеет подчеркивание.

Независимо от того, следует ли писать такой код: является ли наш синтаксис неисправным или это ошибка в Babel?

Я понимаю, что определение cb внутри объекта должно маскировать переданный параметр. Babel назначает разные имена переменной, используемой в объекте, и в прилагаемой функции, указывая имя анонимной функции (зачем это все равно?). После этого он должен переименовать вызов функции внутри commit().

+2

Он работает с использованием этой ES6 скрипку: http://www.es6fiddle.net/ihw471ae/ – Wikunia

+3

Похоже, проблема здесь в том, что Бабель предоставляя анонимные функции в объектных литералах с тем же именем, что и сам ключ. Отлично подходит для отладки, не подходит для вашего случая использования. Кажется, нужно думать, что вновь созданная 'функция cb' доступна из' commit() ', но это явно не так. Вы должны подать ошибку :) – CodingIntrigue

+3

Похож на ошибку в babel, о которой вы должны сообщить. – Bergi

ответ

1

Это была ошибка в Вавилоне 5, и это зафиксировано в Вавилоне 6.

+0

Кажется, это ответ. –

+0

Мы подали отчет об ошибке, который был исправлен (довольно быстро, я мог бы добавить). – chaosflaws

Смежные вопросы