2017-09-22 112 views
1

es6箭頭功能是否有polyfill是否有es6箭頭函數的polyfill?

以下代碼在IE中拋出語法錯誤異常,是否有一個polyfill使IE支持箭頭函數?

var myFunc =()=>{ 
    alert('es6'); 
} 
myFunc(); 

注意:我不希望使用任何transpiler

在此先感謝

+2

這種功能無法polifilled。 – dfsq

+0

傳譯者存在的原因是爲了解決polyfills不能解決的問題。避免它們的動機是什麼? – loganfsmyth

+0

我有一個現有的代碼(遍佈企業應用程序)正在創建/更改我的許多開發人員。所以我想要無縫地讓開發人員使用es6功能。 – Rana

回答

4

箭頭函數沒有填充。除非使用轉譯器,否則編寫代碼時會出現語法錯誤。

0

填充可以添加或修復類,函數,對象,但它不能修改編譯器接受的語法。

+1

類也是新的語法;) –

+0

我不同意,創建新的變量不會增加新的語法 –

+0

'class Foo {}'不能被不支持類的瀏覽器解析。但現在我重讀了這篇文章,我想你的意思是增加內置類的功能(雖然我不確定是否有)。一般而言,我認爲只是說polyfills可以添加/修復* API *不那麼令人困惑。 –

0

添加新語法的功能不能被多重填充。

我只能想到babel-standalone,你可以把它想象成JIT編譯器/轉譯器(如果這對你有用)。

0

我用JS很綠,所以我有一種感覺,這可能不符合polyfill的要求......但它似乎確實是'膠帶'的權宜之計。我發現a fiddleLuis Perez提供此功能。我仍在努力更好地理解箭頭函數,但它至少可以與MDN arrow function examples之一一起工作。這是我玩過後的片段,我設法理解(至少)更好。我希望對某人有用。

var str = [ 
 
    'Hydrogen', 
 
    'Helium', 
 
    'Lithium', 
 
    'Beryllium' 
 
]; 
 

 
var g_arrowCache = Object.create(null); 
 
function arrow(expression) { 
 
    function cache(cache, key, getValueFunc) { 
 
    var value = cache[key]; 
 
    
 
    if(value === undefined) { 
 
     value = getValueFunc(key); 
 
     cache[key] = value; 
 
    } 
 
    return value; 
 
    } 
 
    
 
    function arrowImpl(expression) { 
 
    // This function is a polyfill for proposed "arrow functions" in JavaScript. 
 
    // Example: str.map(_$("str => str.length")) 
 
    
 
    if (expression.search(/\bthis\b/) != -1) throw "'this' not supported"; 
 
    
 
    var indexOfArrow = expression.indexOf("=>"); 
 
    if(indexOfArrow == -1) throw "Expressio is missing the arrow operator =>"; 
 
    var parametersString = expression.substring(0, indexOfArrow); 
 
    
 
    parametersString = parametersString.replace("(", "").replace(")", ""); 
 
    
 
    var parameters = parametersString.split(","); 
 
    parameters.map(function(o) { return o.trim(); }); 
 
    
 
    var functionBody = expression.substring(indexOfArrow + 2); 
 
    
 
    if(expression.indexOf("{") != -1) throw "Use of curly brackets for multiple statements not supported or recommended."; 
 
    if(expression.indexOf("}") != -1) throw "Use of curly brackets for multiple statements not supported or recommended."; 
 
    
 
    functionBody = "return " + functionBody.trim() + ";"; 
 
    var args = parameters.slice(0); 
 
    args.push(functionBody); 
 
    var func = Function.constructor.apply(null, args); 
 
    return func; 
 
    } 
 
    return cache(g_arrowCache, expression, arrowImpl); 
 
} 
 
var _$ = arrow; 
 
console.log(str.map(_$("str => str.length")));

相關問題