简体   繁体   中英

Is there a polyfill for es6 arrow function?

Is there a polyfill for es6 arrow function?

the following code throws syntax error exception in IE, is there a polyfill to make IE support arrow functions?

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

Note : I don't want to use any transpiler .

Thanks in advance

polyfill 可以添加或修复缺失的内置类、函数、对象……但它不能修改编译器接受的语法。

There is no polyfill for arrow functions. It is a syntax error to write the code you have unless you use a transpiler.

Features that add new syntax can not be polyfilled.

I can only think of babel-standalone , which you can think of as a JIT compiler/transpiler (if that is OK with you).

I'm pretty green with JS so I have a feeling that this may not qualify as a polyfill... but it does seem to be a 'duct tape' stopgap though. I found a fiddle made by Luis Perez that gives this functionality. I'm still working to better understand arrow functions but it at least does work with one of the MDN arrow function examples . Here's the snippet that after playing with I managed to understand (better at least) lol. I hope it is useful to someone.

 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")));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM