При поиске в документации ES6 ARROW функций на Mozilla документации, я должен знать, что функции Arrow применяет все правила строгого режима, за исключением одного, как описано в link
Компиляция ES6 стрелка функции в ES5 с использованием Babel.js
var f =() => { 'use strict'; return this};
var g = function() { 'use strict'; return this;}
console.log(f()); //prints Window
console.log(g()); // prints undefined
//we can test this in firefox!
Но Babel.js
является transpiling функцию стрелки код для ES5 кода, который возвращает undefined
, а не Window
(demo link)
"use strict";
setTimeout(function() {
return undefined;
}, 100);
Таким образом, выше фрагмент является выходом из Babel.js. Разве это не могло быть ниже?
"use strict";
setTimeout(function() {
return this;
}.bind(Window), 100);
Если я пишу ES6, я ожидал бы Window
, а не undefined
Является ли это ошибка?
ИЛИ, я ничего не понял?
Babel ставит все в строгом режиме. 'undefined' выглядит корректно. – elclanrs
@elclanrs Это правильно с точки зрения ES5, поскольку код передается в ES5, но в случае функции стрелки в ES6 это должно быть «окно». – dfsq
@dfsq почему это должно быть окно? Он будет наследовать «это» из инкапсулирующего объекта, который не определен; не глобальный. Или я ошибаюсь, думая об этом? – vol7ron