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

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

本文关键字:函数 ready 调用 何调用      更新时间:2023-09-26

我有一个函数准备(e),其中包含一个画布和一些其他函数。我想在画布外面做一个动作来调用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中使用的函数/信息/数据将不得不在画布中使用。Alert()只是一个示例。所以我不能把它放在外面(e)。

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

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

EDIT3:这是html

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

在这种情况下"arraytwo"函数是一个私有函数你可以通过返回它或者使用闭包模式来调用它

    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

为什么不把你的函数移到ready范围之外呢?

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

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;

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

在canvas外部块上调用事件,并在块中侦听它。

必须在公共命名空间中声明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();};