Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.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 为什么不是';t(函数(){}());正在工作,但window.onload是什么?_Javascript_Html_Iife - Fatal编程技术网

Javascript 为什么不是';t(函数(){}());正在工作,但window.onload是什么?

Javascript 为什么不是';t(函数(){}());正在工作,但window.onload是什么?,javascript,html,iife,Javascript,Html,Iife,前几天我在试验javascript,想看看某个函数是否能工作。所以我做了我的HTML: <body> <p id="paragraph"></p> </body> 现在,我打开了我的html,有点困惑为什么我的没有包含任何文本,所以我认为可能没有在页面加载时运行,所以我尝试了其他方法: (function(){ console.log("Hi there!"); }()); 再次打开它,看到javascript当时运行良好;控制

前几天我在试验javascript,想看看某个函数是否能工作。所以我做了我的HTML:

<body>
    <p id="paragraph"></p>
</body>
现在,我打开了我的html,有点困惑为什么我的
没有包含任何文本,所以我认为可能没有在页面加载时运行,所以我尝试了其他方法:

(function(){
    console.log("Hi there!");
}());
再次打开它,看到javascript当时运行良好;控制台像往常一样打印了“你好”。我现在有点困惑,所以我试着:

window.onload = function(){
    document.getElementById("paragraph").innerText = "Hi there!";
}
这一切都很完美!这段话包含了“你好,我想是的”,就像它第一次应该说的那样

有人能解释这种荒谬的行为吗?为什么不是
(function(){/*stuff*/}())
.innerText
工作

加载事件在文档加载过程结束时激发。在 此时,文档中的所有对象都在DOM中,并且 图像和子帧已完成加载

如果您这样做,它将起作用:

// wait for the dom to be ready...
window.onload = function(){
    // update the element...
    (function(){
        document.getElementById("paragraph").innerText = "Hi there!";
    }());    
}
加载事件在文档加载过程结束时激发。在 此时,文档中的所有对象都在DOM中,并且 图像和子帧已完成加载

如果您这样做,它将起作用:

// wait for the dom to be ready...
window.onload = function(){
    // update the element...
    (function(){
        document.getElementById("paragraph").innerText = "Hi there!";
    }());    
}

大多数情况下,浏览器的工作方式是先处理html文件(包括按顺序执行其中的任何脚本),然后创建DOM元素,如段落

因此,当你的生命被执行时,这段文字还不存在(当然,这一定也在你的控制台上打印了一些东西)

log是另一回事——控制台对象甚至在加载html之前就存在了,这就是为什么它工作得很好


另外,您需要在getElementById中使用小写的d浏览器在大多数情况下的工作方式是,首先处理html文件(包括按顺序执行其中的任何脚本),然后创建DOM元素,如段落

因此,当你的生命被执行时,这段文字还不存在(当然,这一定也在你的控制台上打印了一些东西)

log是另一回事——控制台对象甚至在加载html之前就存在了,这就是为什么它工作得很好


另外,您希望在getElementById中使用小写的d,它不应该是
(function(){console.log(“Hi there!”;})()
而不是
(function(){console.log(“你好!”;}())?我只是修改了最后一个括号,因为“正确地链接到了头部的哪个”。在
head
中,DOM还没有准备好,因此
getElementById
将失败,因为它还找不到该元素。。此外,真的不需要将整个语句括在括号中。它不应该是
(function(){console.log(“Hi there!”;})()
而不是
(function(){console.log(“你好!”;}())?我只是修改了最后一个括号,因为“正确地链接到了头部的哪个”。在
head
中,DOM尚未就绪,因此
getElementById
将失败,因为它尚未找到该元素。此外,实际上不需要将整个语句括在括号中。