在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 關(guān)于js作用域的一個(gè)程序問(wèn)題

關(guān)于js作用域的一個(gè)程序問(wèn)題

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>

    <div class="date">
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>
    <script>
        function check(data) {
            if (data < 10) {
                return `0${data}`
            } else {
                return data;
            }
        }
        function dateInit() {
            var dateNow = new Date();

            function getYear() {
                var yearNow = dateNow.getFullYear();
                yearNow = check(yearNow);
                return yearNow;
            }

            function getMonth() {
                var monthNow = dateNow.getMonth();
                monthNow = check(monthNow);
                return monthNow;
            }

            function getDate() {
                var dayNow = dateNow.getDate();
                dayNow = check(dayNow);
                return dayNow;
            }

            function getHour() {
                var hourNow = dateNow.getHours();
                hourNow = check(hourNow);
                return hourNow;
            }

            function getMinus() {
                var minusNow = dateNow.getMinutes();
                minusNow = check(minusNow);
                return minusNow;
            }

            function getSeconds() {
                var SecondsNow = dateNow.getSeconds();
                SecondsNow = check(SecondsNow);
                return SecondsNow;
            }

            function getDay() {
                var dayArr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
                var dayNow = dateNow.getDay();
                return dayArr[dayNow];
            }
        }
        function writeDate() {
            dateInit();
            var spans = document.querySelectorAll('span');
            spans[0].innerHTML = getYear() + '年 ';
            spans[1].innerHTML = getMonth() + '月 ';
            spans[2].innerHTML = getDate() + '日 ';
            spans[3].innerHTML = getDay();
            spans[4].innerHTML = getHour() + '時(shí)';
            spans[5].innerHTML = getMinus() + '分';
            spans[6].innerHTML = getSeconds() + '秒';
            var timer = setInterval(function () {
                writeDate();
            }, 1000)
        }
        writeDate()
    </script>
    </body>

</html>

這是我寫(xiě)的一個(gè)自動(dòng)更新的時(shí)鐘,可以瀏覽器報(bào)錯(cuò)getYear is not defined我的理解是getYear函數(shù)我已經(jīng)在全局定義了,在writeDate()里應(yīng)該能訪(fǎng)問(wèn)到。不知道哪里理解有錯(cuò)誤,代碼需要怎么更改,搞得我現(xiàn)在有點(diǎn)亂,請(qǐng)指出,不勝感激。

回答
編輯回答
陌南塵

你沒(méi)有全局定義函數(shù)啊,你在dateInit()是定義了getYear(),通俗點(diǎn)講getYear()是屬于dateInit()的局部函數(shù),dateInit()形成了一個(gè)閉包,在函數(shù)外面是不能訪(fǎng)問(wèn)dateInit()里面的getYear(),只有在dateInit()里面才有權(quán)限訪(fǎng)問(wèn)getYear()。相對(duì)的,你的其他getMonth()之類(lèi)的函數(shù)也是一樣的,都是未定義。

2017年12月9日 21:17
編輯回答
晚風(fēng)眠

并沒(méi)有全局,JS默認(rèn)變量都是函數(shù)級(jí)別的作用域。
而你的函數(shù)定義在了dateInit函數(shù)內(nèi)部,只有在這個(gè)函數(shù)內(nèi)部才能訪(fǎng)問(wèn)。

2017年1月30日 23:39
編輯回答
別瞎鬧

找本 JS 的基礎(chǔ)書(shū),比如《JS 高級(jí)程序設(shè)計(jì)》,好好看閉包的那章。

2018年1月5日 05:50
編輯回答
悶騷型

請(qǐng)好好看一下自己寫(xiě)的代碼----哪里是全局了

2017年5月15日 14:00