【问题标题】:Executing one function from other JS从其他 JS 执行一个功能
【发布时间】:2016-03-02 13:33:06
【问题描述】:

我有一个 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 个函数放在一个脚本中,但它也不起作用。 是否有任何可能的方法可以从另一个函数执行一个函数并将其放入一个数组中以存储它并在之后绘制它?

【问题讨论】:

  • 在javascript中没有像int y = 250;这样的变量声明
  • 另外,您期望funct2 会返回什么?如果它没有返回一个新函数,你不能做house[j]()
  • @millerbr 我想在不创建数千个相同功能的情况下绘制一排相同的房屋。

标签: javascript html5-canvas


【解决方案1】:

如果您在一两个脚本标签中执行此操作,则无关紧要,因为无论如何浏览器都会同步执行它们。 您对 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>

【讨论】:

  • 抱歉,评论太慢了,但上一篇没有加载。感谢您的更正,现在它可以正常工作了。
【解决方案2】:

这应该在同一个脚本标签中工作。您需要将 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]()

【讨论】:

  • 那么我到底需要在函数中创建函数来生成房屋行吗?
  • 是的——如果函数每次都要改变,就需要生成
【解决方案3】:

你要找的东西其实很复杂。您希望func2 返回基于 x 和 y 的函数。这可以通过像this 那样动态定义它们然后返回它们并将它们保存在house 数组中来实现。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    相关资源
    最近更新 更多