将值传递给内部函数不起作用

时间:2018-04-25 12:00:23

标签: javascript

我有一个简单的场景,我循环一个数组然后基于数组的每个元素我创建一个对象并将其传递给另一个函数,该函数在另一个函数内定义。但是最外层函数的值没有被传递。

<Grid Height="200"
          Width="600">
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"
                          MaxWidth="200" />
        <ColumnDefinition Width="Auto" />
      </Grid.ColumnDefinitions>
      <Border Background="Blue"
              Grid.Column="0" />
      <Viewbox Grid.Column="1"
               Stretch="Uniform"
               MaxWidth="400">
        <Border Background="Yellow"
                BorderBrush="Red"
                BorderThickness="4"
                Height="200"
                Width="300" />
      </Viewbox>
    </Grid>

编辑:

// function1() returns an array

 function1().forEach(function (el) {
        var info = {};
        info.age = el

        function2('somearg',function(){
            fn3(info); //--------?? this info value is not being passed
        })
        console.log(info) //------?? it works here

    })

2 个答案:

答案 0 :(得分:0)

您最好将代码重构为类似的内容。我知道,它并不完全是你所询问的,但我想它可能对你有所帮助。 我假设你要为你的元素添加一些事件监听器或类似的东西。

&#13;
&#13;
function function1() {
  return [18, 20, 30]
}

function fn3(info){ 
  console.log(info)      
} 

function addListener (fn) {
  return function (el) {
    console.log('Added callback',fn, el);
    //add event listener here, or whatever you want with fn
    //el.addEventListener('click')
  }
}

function getInfo(el) {
    return {
      age: el
    }
  }

const addListenerFn3 = addListener(fn3);      
  
let infoArray = function1().map(getInfo)
  
infoArray.forEach(addListenerFn3)
&#13;
&#13;
&#13;

如果你的function1不是一个数组,而是返回类似数组的对象,你应该将它转换为数组,以便能够调用.map()。请随意向我的答案提问,或者您可以添加有关您要解决的问题的更多详细信息。我只是想鼓励您将代码拆分为易于测试和理解的较小函数。

答案 1 :(得分:0)

<script>
  var info;
   [1,2,3].forEach(function (el) {
        info = {};
        info.age = el;

        function2('somearg',function(){
            fn3(info); 
        });
        console.log(info) ;

    });
   function function2(node, func) {node.onclick = func();} 
function fn3(info){ console.log(info);} 
</script>