Javascript致敬秀
早上好 请,我想根据时间显示敬礼信息。。尝试过这个自动初始化功能,它可以工作,但与时间无关,他显示:“晚安”。我做错了什么??有人能帮忙吗 代码如下:Javascript致敬秀,javascript,date,hour,Javascript,Date,Hour,早上好 请,我想根据时间显示敬礼信息。。尝试过这个自动初始化功能,它可以工作,但与时间无关,他显示:“晚安”。我做错了什么??有人能帮忙吗 代码如下: (function(){ function saluteText() { var d = new Date(); var time = d.getHours(); var divInnerHTML = document.querySelector('.name'); i
(function(){
function saluteText() {
var d = new Date();
var time = d.getHours();
var divInnerHTML = document.querySelector('.name');
if (time < 12) {
function addInnerHTML() {
divInnerHTML.innerHTML = 'Good morning!';
}
}
else if (time >=12 && time <18) {
function addInnerHTML() {
divInnerHTML.innerHTML = 'Good evening!';
}
}
else if (time >= 18 && time < 24) {
function addInnerHTML() {
divInnerHTML.innerHTML = 'Good night!';
}
}
addInnerHTML();
}
saluteText()
})();
(函数(){
函数sallettext(){
var d=新日期();
var time=d.getHours();
var divinerHTML=document.querySelector('.name');
如果(时间<12){
函数addInnerHTML(){
divInnerHTML.innerHTML=‘早上好!’;
}
}
否则如果(时间>=12&&time=18&&time<24){
函数addInnerHTML(){
divInnerHTML.innerHTML=‘晚安!’;
}
}
addInnerHTML();
}
敬礼文字
})();
我认为这是定义函数的问题
在javascript中定义函数时,它位于作用域的顶部
定义函数三次,最后一次仅显示。即使将声明放在if语句之间,也会创建这三个语句
您可以通过删除最后一个函数来尝试这一点,您将看到代码显示“晚上好”
在这种情况下,解决问题的方法是:
function addInnerHTML(message) {
divInnerHTML.innerHTML = message;
}
if (time < 12) {
addInnerHTML('Good morning!');
}
else if (time >=12 && time <18) {
addInnerHTML('Good evening!');
}
else if (time >= 18 && time < 24) {
addInnerHTML('Good night!');
}
函数addinnertml(消息){
divInnerHTML.innerHTML=消息;
}
如果(时间<12){
早上好;
}
否则如果(时间>=12&&time=18&&time<24){
addInnerHTML(“晚安”);
}
“在javascript中定义函数时,它被放在调用堆栈的顶部。”-调用堆栈?那是不对的。另外,您的解决方案现在定义了四次addinnertml()
函数。您是对的,我将这个答案提交给fast。正如sumeet所说,功能被提升,我混淆了这两个。当我有机会调整这个答案时,谢谢。为什么你有那些addinnertml()
函数?为什么不在每个if/else情况下直接设置innerHTML呢?如果要有条件地定义函数,则需要声明var addInnerHTML在if/else块之前设置code>,然后在if/else中设置addinnertml=function(){…}
。