Итак... ES6¹ (который стандартизован несколько часов назад) предоставляет параметры по умолчанию для функций, аналогичных функциям PHP, Python и т.д. Я могу делать такие вещи, как:
function foo (bar = 'dum') {
return bar;
}
foo(1); // 1
foo(); // 'dum'
foo(undefined); // 'dum'
MDN говорит, что значение по умолчанию для параметра оценивается во время вызова. Это означает, что каждый раз, когда я вызываю функцию, выражение 'dum'
снова оценивается (если только реализация не делает некоторые странные оптимизации, которые нам не нужны).
Мой вопрос: как this
играет в это?
let x = {
foo (bar = this.foo) {
return bar;
}
}
let y = {
z: x.foo
}
x.foo() === y.z(); // what?
Транзитор babel в настоящее время оценивает его как false
, но я этого не понимаю. Если они действительно оцениваются во время разговора, что с этим делать:
let x = 'x from global';
function bar (thing = x) {
return thing;
}
function foo () {
let x = 'x from foo';
return bar();
}
bar() === foo(); // what?
Трансилер babel в настоящее время оценивает значение³ как true
, но я не понимаю. Почему bar
не принимает x
из foo
при вызове внутри foo
?
<суб > 1 - Да, я знаю, что это ES2015.
2 - Пример A
3 - Пример B
суб >