从其他JS执行一个函数

时间:2016-03-02 13:33:06

标签: javascript html5-canvas

我有一个java脚本,我希望有一个函数,它接受一个参数并执行多次不同的函数。

我现在有类似的东西:

<body onLoad="funct1(5)">

<script>
    funct1(a){
        var house = [];
        int x = 20;
        int y = 250;
        for(var i= 0; i<a; i++){
            house [i] = funct2(x,y);
            y=y+50;
        }

        for (var j = 0; j<a; j++){
            house[j]();
        }
    }
</script>

<script>
    funct2(x,y){
    //doing something with that 2 variables, drawing a house.
    } 
</script>    

我试图将这2个函数放在一个脚本中,但它也没有用。 是否有任何可能的方法从另一个函数执行一个函数并将其放入一个数组来存储它并在之后绘制它?

3 个答案:

答案 0 :(得分:2)

如果您在一个或两个脚本标记中执行此操作,则无论如何浏览器将同步执行它们无关紧要。 您对x和y的变量声明是错误的。 你的函数声明也是错误的。 无论如何,它们只是语法错误,你最终会避免。

您不能调用“house [j]()”,因为您已在此语句中执行了该功能:“funct2(x,y)”。 如果你想用手前指定的参数存储函数调用,那么你应该使用:“house [i] = funct2.bind(this,x,y)”即你将参数绑定到函数在house [i]中调用并存储此可调用绑定函数的副本。

我想这就是你想要的:

<body onLoad="funct1(5)">

<script>
    function funct1(a){
        var house = [];
        var x = 20;
        var y = 250;
        for(var i= 0; i<a; i++){
            house [i] = funct2.bind(this, x, y);
            y=y+50;
        }

        for (var j = 0; j<a; j++){
            house[j]();
        }
    }
</script>

<script>
    function funct2(x,y){
        console.log('drawing house with x '+x+' and y '+y);
    }
</script>

答案 1 :(得分:1)

这应该来自相同的脚本标记。您需要将int xint y更改为var xvar y,但是:

<script>
    var funct1= function(a){
        var house = [];
        var x = 20;
        var y = 250;
        for(var i= 0; i<a; i++){
            house [i] = funct2(x,y);
            y=y+50;
        }

        for (var j = 0; j<a; j++){
            house[j]();
        }
    }
    var funct2 = function(x,y){
    //doing something with that 2 variables, drawing a house.
        return function() { 
            //do stuff with x and y
        }
    } 
</script>

funct2现在也会返回一个函数,允许您在结果上调用house[j]()

答案 2 :(得分:0)

你正在寻找的东西实际上非常复杂。您希望func2根据x和y返回函数。这可以通过像this那样动态定义它们然后返回它们并将它们保存在house数组中。

但你为什么要这样做呢?不要将它们保存在house数组中,只需让func2直接绘制它们。