Javascript-返回返回函数的值

时间:2018-06-27 14:59:06

标签: javascript scope closures return-value return-type

我现在正在开发一个主要是前端UI的项目。

现在我的一个函数遇到问题,其中返回值返回的是函数本身,而不是函数的产生。

我将首先解释预期的结果

1。)页面上有一个菜单,当单击菜单中的一个按钮时,会使用该按钮将另一个菜单添加到该页面中-我将其称为子菜单。

em>

2。)单击子菜单中可用的按钮时,将创建另一个菜单并将其添加到页面其他位置的列表中。

我将解释我拥有的代码以及问题所在的位置:

1。)创建菜单按钮的位置:

var add = document.createElement('button');

2。)这是将事件侦听器添加到上面的按钮的位置:

closure = (function(arrayItem) 
{
    var test = function(event)
    { 
        object.spaces.push(selectedSpace.id);
        object.spaceobjects.push(selectedSpace);

        var enemyPanel = addEntityPanel(roomnumber, selectedSpace.id, object, object.savelocation, true);

        return enemyPanel ;
    };

return test;

})(arrayItem);

add.addEventListener("click", closure, false); 

我使用了变量闭包,并出于闭包的原因将其传递给匿名函数,因此可以通过for循环修改变量 arrayItem

您可能会注意到函数addEntityPanel,该函数创建我一直在引用的菜单并将其添加到列表中,它还会返回一个对象,其中包含用于创建的所有html元素菜单-将其存储在变量enemyPanel中。

来自测试函数的

enemyPanel返回到变量test,测试返回到变量closure,该变量应该使我能够访问在addEntityPanel函数中创建的对象敌人面板;但是,返回的只是函数本身作为字符串。我试图改变:

return test;

return test();

但是创建子菜单中的按钮后,所有这些操作都将执行该功能。我只希望在单击按钮时执行它。

我对闭包不太熟悉,所以如果闭包功能出了点问题,阻止它生成所需的输出,我不会感到惊讶。

我愿意接受所有建议。请让我知道你们的想法,谢谢!

1 个答案:

答案 0 :(得分:1)

  来自enemyPanel函数的

... test返回到变量test ...

不,不是。您是将函数本身分配给变量test,而不是调用它的结果。

有两个问题:

  1. 您将错误的函数传递给addEventListener。应该是test,由closure创建的函数,而不是closure

    add.addEventListener("click", test, false);
    
  2. 您正在从事件处理程序返回enemyPanel。通过addEventListener is completely ignored添加的事件处理程序的返回值。¹您不能返回 enemyPanel。您可以创建它,将其分配给该函数范围内的变量,将其添加到列表等,但是您不能在事件处理程序中的任何地方返回


¹这是我贫乏的小博客上的帖子。