[英]require a JSON file throws a Node.js loader error "Error: Cannot find module 'example.json'" when running Babel transpiled code
[英]Transpiled code throws error when masking a parameter with an object variable
我們嘗試將以下代碼移植到ES6:
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)並且不會拋出錯誤。
然而,巴貝爾將其轉化為:
"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
此代碼失敗,因為在commit()
內部調用的cb()
沒有下划線。
無論你是否應該編寫這種代碼:我們的語法是錯誤的還是Babel中的錯誤?
我的理解是對象內部的cb
定義應該掩蓋傳遞的參數。 Babel為對象和封閉函數中使用的變量分配不同的名稱,同時為匿名函數命名(為什么它會這樣做呢?)。 之后,它應該重命名commit()
的函數調用。
這是Babel 5中的一個錯誤,它已在Babel 6中修復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.