JavaScript函数来自数组

时间:2016-06-18 12:42:12

标签: javascript arrays function

快速提问。

我有一个包含3个函数的数组。当我调用我想要执行的特定函数时,它不响应数组中的特定索引。它只执行所有功能,直到它到达最后一个功能。

以下是代码:

<p id="sometext">Change Color</p>
<script>
    function paintRed() {
        var text = document.getElementById('sometext');
        text.style.color = "red";
    }

    function paintBlue() {
        var text = document.getElementById('sometext');
        text.style.color = "blue";

    }
    function paintYellow() {
        var text = document.getElementById('sometext');
        text.style.color = "yellow";

    }

    var arrcolor = [ paintRed(), paintBlue(), paintYellow()];

    arrcolor[0]; //This returns the yellow color and not red//

</script>

所以我的

更改颜色

总是返回黄色(数组中的最后一个函数),无论我调用哪个索引,即(arrcolor [0],arrcolor [1])。 p>

希望它有意义。谢谢。

5 个答案:

答案 0 :(得分:5)

您只能将函数名称(实际上是引用)放在数组中并像这样执行它

{{1}}

JSFIDDLE

另一种方法是创建一个对象并将每个函数放在其中

{{1}}

JSFIDDLE

答案 1 :(得分:4)

你应该将函数添加到数组中,而不是像以下那样调用它们:

{{1}}

稍后,您可以致电每个人:

{{1}}

当你正在调用一个函数时,不要忘记最后的{{1}}。

答案 2 :(得分:1)

我认为它应该是这样的:

<p id="sometext">Change Color</p>
<script>
    function paintRed() {
        var text = document.getElementById('sometext');
        text.style.color = "red";
    }

    function paintBlue() {
        var text = document.getElementById('sometext');
        text.style.color = "blue";

    }
    function paintYellow() {
        var text = document.getElementById('sometext');
        text.style.color = "yellow";

    }

    var arrcolor = [ paintRed, paintBlue, paintYellow];

    arrcolor[0]();

</script>

描述:数组只存储一个函数引用,当你取消引用它时,它将被调用。

答案 3 :(得分:0)

删除功能名称var arrcolor = [ paintRed(), paintBlue(), paintYellow()]后面的括号。

在声明和初始化arrcolor时,您已经调用了函数,因此它将存储函数的返回值,在这种情况下将给出[undefined, undefined, undefined]

答案 4 :(得分:0)

是因为你在数组中执行每个函数,但最后一个函数是paintYellow()

外观:

var arrcolor = [ paintRed(), paintBlue(), paintYellow()];

现在你的arrcolor有3个元素是“未定义的”,因为你的每个函数都没有返回任何数据(你可以检查它 - typeof(arrcolor[0]) == "undefined")。如果要调用第一个元素,则应将数组定义为“函数指针”,如下所示:

var arrcolor = [ paintRed, paintBlue, paintYellow];

然后执行您选择的paintRed

arrcolor[0]();