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

how to call function that is inside a function ready()?

我有一个函数 ready(e),里面有一个 canvas 和一些其他函数。 我想在 canvas 之外执行一个操作来调用 ready(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 中使用的 function/information/data 必须在 canvas 中使用。 alert() 只是一个例子。所以我不能把它放在外面 ready(e).

EDIT2:在函数 ready(e) 之前有一行代码。希望这些信息有用:(

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

EDIT3:这是 html

中 canvas 的代码
<canvas id="myCanvas"></canvas>

为什么不将函数移出 ready 范围?

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

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

arraytwo();

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

在块外 canvas 调用事件,并在块内监听。

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

var canvas;
var ctx;


    function ready(e)
    {

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

    }

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

    var arrayTwoData=arraytwo();

还想指出,更好的做法是使用 window.onload=function(){arrayTwo();};

在这种情况下 "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

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

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

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

这将使它在全球范围内可见。