【发布时间】:2014-04-03 10:45:48
【问题描述】:
前几天我在试验 javascript,想看看某个函数是否可以工作。所以我做了我的 HTML:
<body>
<p id="paragraph"></p>
</body>
(当然,在实际文档中我已经设置了我的doctype并创建了html标签等等)
然后写了我的javascript(正确链接到头部):
(function(){
document.getElementById("paragraph").innerText = "Hi there!";
}());
现在,我打开了我的 html,有点困惑为什么我的<p> 不包含任何文本,所以我想IIFE 可能没有在页面加载时运行,所以我尝试了其他方法:
(function(){
console.log("Hi there!");
}());
再次打开,发现当时 javascript 运行良好;控制台像往常一样打印了“Hi There”。我现在有点困惑,所以我尝试了:
window.onload = function(){
document.getElementById("paragraph").innerText = "Hi there!";
}
一切都很完美!该段落包含“您好”,就像它第一次应该(嗯,我想是这样)一样!
谁能解释这种荒谬的行为?为什么(function(){/*stuff*/}()); 不为.innerText 工作?
【问题讨论】:
-
不应该是
(function(){ console.log("Hi there!"); })();而不是(function(){ console.log("Hi there!"); }());吗?我刚刚修改了最后一个括号。 -
因为“正确链接到头部”。在
head中,DOM 尚未准备好,因此getElementById将失败,因为它还找不到该元素.. -
另外,真的没必要用括号括起来。
标签: javascript html iife