Javascript onload需要在解析时识别函数吗?

Javascript onload需要在解析时识别函数吗?,javascript,html,Javascript,Html,我有一个Iframe: <iframe src='http://jsbin.com/iyaVOSe/1' onload='aaa()' id='ifr'/> 这是非常奇怪的,因为onload有一点延迟,而且-不使用iframe而使用onclick事件时也没关系: 输入工作示例 <input onclick='aaa()' /> <script> window.aaa= function () {

我有一个Iframe:

 <iframe src='http://jsbin.com/iyaVOSe/1' onload='aaa()' id='ifr'/>
这是非常奇怪的,因为onload有一点延迟,而且-不使用iframe而使用onclick事件时也没关系:

输入工作示例

 <input onclick='aaa()' />
      <script>  
        window.aaa= function ()
        {
          alert('load');
           
        }
       
        </script>
  
 

window.aaa=函数()
{
警报(“加载”);
}
此外-在iframe示例中-:将
aaa
转换为:

即便如此-在解析时它也不需要知道
aaa
。-因为有一个包装功能

注意:iframe的加载事件用于加载页面,而不是创建元素

因此-当它解析
iframe
-它开始异步加载iframe-不阻塞,然后它立即转到脚本部分,其中声明了
aaa

我错过了什么(我在寻找一个原因,而不是一个解决方案)?如果我调用onload或onclick有什么区别


看起来iframe
onload
在解析时需要该函数。(而不是在运行时-当事件实际发生时。)

元素在代码本身中按顺序呈现。脚本也是如此(使用
延迟
异步
指定的外部脚本除外)。因此,当加载
iframe
时,它无法立即找到
aaa
的函数定义,因此在
onload
的情况下不会调用
aaa()
,而是在
onclick()的情况下调用
单击
事件发生之前,
脚本
iframe
都已加载(因为
单击
是手动执行的,而
加载
是自动执行的)


因此,建议将所有函数定义保留在
head
中的
脚本
部分,以便将来调用这些函数。

元素在代码本身中按顺序呈现。脚本也是如此(使用
延迟
异步
指定的外部脚本除外)。因此,当加载
iframe
时,它无法立即找到
aaa
的函数定义,因此在
onload
的情况下不会调用
aaa()
,而是在
onclick()的情况下调用
单击
事件发生之前,
脚本
iframe
都已加载(因为
单击
是手动执行的,而
加载
是自动执行的)


因此,建议在
head
中的
脚本
部分保留所有函数定义,以便将来调用这些函数。

iframe元素未定义为空。(元素的内容是不支持或禁用iFrame时要呈现的内容)。因此,不能使用XML空元素语法来表示iframe。您需要一个显式的结束标记

您正在提供脚本元素作为替代内容。如果呈现iframe,则替代内容将被忽略,因此脚本将不会执行,函数也永远不会添加到JS环境中


使用
而不是
和。

iframe元素未定义为空。(元素的内容是不支持或禁用iFrame时要呈现的内容)。因此,不能使用XML空元素语法来表示iframe。您需要一个显式的结束标记

您正在提供脚本元素作为替代内容。如果呈现iframe,则替代内容将被忽略,因此脚本将不会执行,函数也永远不会添加到JS环境中


使用
而不是
和。

但它不会立即加载!这就是你所缺少的。而且它不会阻挡你的提问。@RoyiNamir你所问的确实很有趣。需要更多的研究。既然您已经发表了评论,它帮助我正确地思考了
阻塞问题。不管怎样,谢谢你的提问+谢谢你的提问。我认为你需要在评论中提到所有这些关于
阻塞的
,以使其他人意识到问题的观点。但它不会立即加载!这就是你所缺少的。而且它不会阻挡你的提问。@RoyiNamir你所问的确实很有趣。需要更多的研究。既然您已经发表了评论,它帮助我正确地思考了
阻塞问题。不管怎样,谢谢你的提问+谢谢你的提问。我认为你需要在评论中提到所有这些关于
阻止
,让其他人意识到问题的观点。phewww。。。。。。我以为我疯了。。。非常感谢昆汀(一如既往)。昆汀-有点离题:但是-这里的
async
prop-->
var a=createElement('script');a、 异步=真与此处完全相同-->
..
。它不这么认为,因为async attr对html5来说是新的,而我看到许多脚本(在旧浏览器上运行)使用了
a.async=true
;呸。。。。。。我以为我疯了。。。非常感谢昆汀(一如既往)。昆汀-有点离题:但是-这里的
async
prop-->
var a=createElement('script');a、 异步=真与此处完全相同-->
..
。它不这么认为,因为async attr对html5来说是新的,而我看到许多脚本(在旧浏览器上运行)使用了
a.async=true
 <iframe src='http://jsbin.com/iyaVOSe/1' onload='aaa()' id='ifr'/>
<script>  
    window.aaa= function ()
    {
      alert('load');
       
    }
 </script>
 <input onclick='aaa()' />
      <script>  
        window.aaa= function ()
        {
          alert('load');
           
        }
       
        </script>