我有一个名为' parent'它具有嵌套功能' child'在里面。两者都有名为' total'在里面。我想访问父母的总数'在孩子的总数内。我怎样才能做到这一点。我已经阅读了有关闭包的内容,但它并没有回答我的问题。
function parent() {
var total = 20;
function child() {
var total = 30;
console.log(total); //output: 30
//I want to access parent's total variable here
console.log(total); //expected output: 20
}
}
答案 0 :(得分:0)
你不能。正如其他人所提到的,这被称为variable shadowing。它完全掩盖了外部上下文中的变量。
解决这个问题的最简单方法就是简单地命名它们。一般来说,给孩子一个不同的变量名称通常不会太具破坏性:
function parent() {
const total = 30;
function child() {
const childTotal = 20;
console.log(childTotal);
console.log(total);
}
child();
}
parent();

另一种方法是将父值作为参数传递给子节点,并在参数中为其指定一个不同的名称:
function parent() {
const total = 30;
function child(parentTotal) {
const total = 20;
console.log(total);
console.log(parentTotal);
}
child(total);
}
parent();

最后,如果该值等于公共静态值,您可以这样抓取它:
function parent() {
function child() {
const total = 20;
console.log(total);
console.log(parent.total);
}
child();
}
parent.total = 30;
parent();

这总结了你所有的选择。如前所述,只更改其中一个名称是迄今为止99%的最佳解决方案。