如何调用函数 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;
这将使它在全球范围内可见。
我有一个函数 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;
这将使它在全球范围内可见。