<!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() + '时';
spans[5].innerHTML = getMinus() + '分';
spans[6].innerHTML = getSeconds() + '秒';
var timer = setInterval(function () {
writeDate();
}, 1000)
}
writeDate()
</script>
</body>
</html>
这是我写的一个自动更新的时钟,可以浏览器报错getYear is not defined我的理解是getYear函数我已经在全局定义了,在writeDate()里应该能访问到。不知道哪里理解有错误,代码需要怎么更改,搞得我现在有点乱,请指出,不胜感激。
你没有全局定义函数啊,你在
dateInit()
是定义了getYear()
,通俗点讲getYear()
是属于dateInit()
的局部函数,dateInit()
形成了一个闭包,在函数外面是不能访问dateInit()
里面的getYear()
,只有在dateInit()
里面才有权限访问getYear()
。相对的,你的其他getMonth()
之类的函数也是一样的,都是未定义。