Javascript 为什么不是';t(函数(){}());正在工作,但window.onload是什么?
前几天我在试验javascript,想看看某个函数是否能工作。所以我做了我的HTML: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当时运行良好;控制
<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
将失败,因为它尚未找到该元素。此外,实际上不需要将整个语句括在括号中。