Mar*_*ark 0 javascript ecmascript-6
const foo = () => 'foo!';
const doAThing = (
foo = foo
) => {
console.log(foo)
}
doAThing();
Run Code Online (Sandbox Code Playgroud)
给出以下内容:
/private/var/folders/xp/n5tbdrrs761ck82qqychcf61ptmq9d/T/CodeRunner/Untitled.js:4
foo = foo
^
ReferenceError: foo is not defined
at doAThing (/private/var/folders/xp/n5tbdrrs761ck82qqychcf61ptmq9d/T/CodeRunner/Untitled.js:4:8)
at Object.<anonymous> (/private/var/folders/xp/n5tbdrrs761ck82qqychcf61ptmq9d/T/CodeRunner/Untitled.js:9:1)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:423:7)
at startup (bootstrap_node.js:147:9)
Run Code Online (Sandbox Code Playgroud)
(如果我做它_foo = foo然后它工作.)为什么foo没有在我的例子中定义?
为什么我的例子中没有定义foo?
评估参数定义会创建一个定义参数的新范围.这允许您引用默认值中的参数,例如
function foo(x, y=x) {
console.log(x, y);
}
foo(42);Run Code Online (Sandbox Code Playgroud)
正因为如此,第二个foo在foo=foo实际上指的是参数 foo本身.它遮蔽了"外部" foo.但是你现在不能参考,foo因为它还没有被初始化.
把它想象成是一样的
let x = x;
Run Code Online (Sandbox Code Playgroud)