如何调用函数ready()中的函数?

时间:2015-10-27 07:34:35

标签: javascript html5 function canvas html5-canvas

我有一个功能准备好(e)里面有一个画布和一些其他功能。 我想在画布外面做一个动作来调用准备好的函数(e)。我怎样才能做到这一点?非常感谢!!

下面是我的代码的简化版本..我想在函数ready(e)之外调用arraytwo()...

function ready(e)
{
    var canvas;
    var canvasWidth;
    var canvasHeight;
    var ctx;
    canvas = document.getElementById('myCanvas');
    canvasWidth = 1100  ;
    canvasHeight = 1200;
    ctx = canvas.getContext('2d');
    function arraytwo() 
    {alert("arraytwo");}
}
arraytwo();

编辑:对不起,我应该澄清一下,我在arraytwo中使用的函数/信息/数据必须在画布中使用。 alert()只是一个例子。所以我不能把它放在外面(e)。

EDIT2:在功能就绪(e)之前有一行代码。希望这些信息有用:(

this.addEventListener("DOMContentLoaded", ready, true);

EDIT3:这是html中画布的代码

<canvas id="myCanvas"></canvas>

5 个答案:

答案 0 :(得分:1)

在这种情况下,“arraytwo”函数是一个私有函数,您可以通过返回它或使用Closure模式

来调用它
    function ready(e)
    {
        var canvas;
        var ctx;
       // canvas = document.getElementById('myCanvas');
      // ctx = canvas.getContext('2d');
      return {
                arraytwo:function(){
                  alert("arraytwo");
                }
             }
    }

v = ready() // call your outer function 
v.arraytwo()// call your closures function

答案 1 :(得分:0)

为什么不将您的功能移到ready范围之外?

function ready(e)
{
    var canvas;
    var ctx;
    canvas = document.getElementById('myCanvas');
    ctx = canvas.getContext('2d');
}

function arraytwo(){
    alert("arraytwo");
}

arraytwo();

答案 2 :(得分:0)

&#13;
&#13;
function ready(e)
{
    var canvas;
    var ctx;
    canvas = document.getElementById('myCanvas');
    ctx = canvas.getContext('2d');
    function arraytwo() 
    {
      alert("arraytwo");
    }
    ready.arraytwo=arraytwo;
}
ready.arraytwo();
&#13;
&#13;
&#13;

虽然我在上面说明了你不应该这样做的原因。您可以通过添加

将arraytwo添加为子项来构建您的对象
ready.arraytwo=arraytwo;

将在全球范围内实现这种可变性。

答案 3 :(得分:-1)

您可以使用此事件 https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events

在块外的画布上调用事件,并在块中监听它。

答案 4 :(得分:-1)

您必须在公共命名空间中声明arraytwo()。通过将它放在函数ready()中,它只存在于ready()的范围内。没有理由在函数内声明一个函数,除非它只用在父函数的上下文和范围内。例如,如果您有两个函数,这两个函数都具有不同的同名方法,并且希望它们访问父函数范围内的变量,那么您将嵌套它们。在这种情况下,嵌套不是正确的方法。

&#13;
&#13;
var canvas;
var ctx;


    function ready(e)
    {

        canvas = document.getElementById('myCanvas');
        ctx = canvas.getContext('2d');

    }

    function arraytwo()  
    {
       alert("arraytwo");
      return arrayTwoData;
    }

    var arrayTwoData=arraytwo();
&#13;
&#13;
&#13;

还想指出使用window.onload = function(){arrayTwo();};

更好的做法