访问具有相同名称的变量的子函数内的父函数变量

时间:2018-04-04 16:19:03

标签: javascript

我有一个名为' 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
  }
}

1 个答案:

答案 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%的最佳解决方案。