use*_*110 11 javascript default-parameters ecmascript-6
所以...ES6¹(几个小时前恰好标准化)为类似于PHP,Python等的函数带来了默认参数.我可以这样做:
function foo (bar = 'dum') {
return bar;
}
foo(1); // 1
foo(); // 'dum'
foo(undefined); // 'dum'
Run Code Online (Sandbox Code Playgroud)
MDN表示在调用时评估参数的默认值.这意味着每次调用该函数时,'dum'都会再次计算表达式(除非实现执行一些我们不关心的奇怪的优化).
我的问题是,如何this发挥作用?
let x = {
foo (bar = this.foo) {
return bar;
}
}
let y = {
z: x.foo
}
x.foo() === y.z(); // what?
Run Code Online (Sandbox Code Playgroud)
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?
Run Code Online (Sandbox Code Playgroud)
babel转换器目前正在评估它true,但我没有得到它.为什么bar不采取x从foo内部调用时foo?
Ber*_*rgi 11
我的问题是,如何
this发挥作用?我不明白.他们是否真的在通话时评估?
是的,参数初始值设定项在调用时进行评估.这很复杂,但步骤基本如下:
thisBinding被初始化arguments创建一个绑定对象undefinedlet和const变量因此,参数初始化者可以访问调用this和arguments调用,先前初始化的其他参数以及处于"上限"词法范围内的所有内容.它们不受函数体中声明的变量的影响(尽管它们受所有其他参数的影响,即使它们的临时死区也是如此).
那这个呢:
Run Code Online (Sandbox Code Playgroud)function bar (thing = x) {} { let x = 'x from foo'; return bar(); }我不明白.为什么
bar不采取x从foo内部调用时foo?
因为x是bar无权访问的局部变量.我们很幸运,他们没有动态范围!参数初始化程序不在调用站点评估,而是在被调用函数的作用域内评估.在这种情况下,x标识符将解析为全局x变量.
| 归档时间: |
|
| 查看次数: |
247 次 |
| 最近记录: |