Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
窗口内的Javascript函数。addEventListener(“加载”,函数()未定义-为什么?_Javascript - Fatal编程技术网

窗口内的Javascript函数。addEventListener(“加载”,函数()未定义-为什么?

窗口内的Javascript函数。addEventListener(“加载”,函数()未定义-为什么?,javascript,Javascript,我有一个非常简单的Javascript函数,名为Notice()。我只想在页面加载后访问它(Notice()函数使用一些其他变量,这些变量只有在页面加载完成后才可用)。错误是“Notice()函数未定义” 为什么没有定义它,以及如何确保它被定义并在包含在窗口中时正常工作。addEventListener(“load”,function())函数 整个代码如下,JS fiddle如下: 提交 addEventListener(“加载”,函数(){ 功能通知(){ 警报(“正常”); } },假);

我有一个非常简单的Javascript函数,名为Notice()。我只想在页面加载后访问它(Notice()函数使用一些其他变量,这些变量只有在页面加载完成后才可用)。错误是“Notice()函数未定义” 为什么没有定义它,以及如何确保它被定义并在包含在窗口中时正常工作。addEventListener(“load”,function())函数

整个代码如下,JS fiddle如下:

提交
addEventListener(“加载”,函数(){
功能通知(){
警报(“正常”);
}
},假);

函数声明的作用域是它们在其中声明的函数。您只能从匿名加载函数中调用
Notice
。您可以通过在
窗口中显式放置
Notice
来更改这一点:

window.addEventListener("load", function () {
  window.Notice = function () {
    alert('ok');
  }
}, false);
或者更好的方法是,去掉
addEventListener
,只声明函数。我看不出在当前代码中有什么理由这样做:

function Notice () {
  alert('ok');
}
您可以在这个代码笔中看到两种方法:


如果您可以控制创建按钮的html,则可以消除显式onClick事件,并在加载窗口后通过js将其添加进来:

window.addEventListener("load", function () {
  window.Notice = function () {
    alert('ok');
  }
  document.getElementById("L").onclick = Notice()
}, false);

因为函数是在按钮创建之后才定义的,从这个
通知
函数应该被调用的地方?
窗口。addEventListener
或通过按钮clickHm。我认为函数首先加载,然后应该可用(我在页面加载后单击按钮)。是否可以使其工作?只应在单击按钮时调用Notice()函数。问题是范围,而不是时间。请参阅下面的答案。我试图更新它,但它似乎没有发出警报…-可能是我犯了一些错误?您犯了在第5行调用Notice的错误(即,
…=Notice()
),当您只想引用它时(即,
…=注意
)。此外,它看起来像是JSFIDLE抑制警报,否则您会在加载页面时立即看到警报。您可以在此处看到它正在工作:。尽管我建议将其简化为:。
window.addEventListener("load", function () {
  window.Notice = function () {
    alert('ok');
  }
  document.getElementById("L").onclick = Notice()
}, false);