簡體   English   中英

使用對象變量屏蔽參數時,透明代碼會引發錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM