Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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致敬秀_Javascript_Date_Hour - Fatal编程技术网

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中设置
addinnertml=function(){…}