所以...ES6¹(發生幾個小時前被標準化)帶來默認參數爲類似於PHP,Python的等等。我可以做的東西一樣的功能:`this`如何在默認參數下工作?
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?
巴貝爾transpiler目前evaluates²它作爲false
,但我不明白這一點。如果他們在通話時間真的評估,你看這個:
let x = 'x from global';
function bar (thing = x) {
return thing;
}
function foo() {
let x = 'x from foo';
return bar();
}
bar() === foo(); // what?
巴貝爾transpiler目前evaluates³它作爲true
,但我不明白這一點。爲什麼bar
在foo
內部調用時不能使用foo
中的x
?
1 - 是的,我知道這是ES2015。
2 - Example A
3 - Example B
董事會是否接受了最終的ES6草案? –
@squint規範是住在http://www.ecma-international.org/ecma-262/6.0/index.html :) –
好的,謝謝! –