Javascript未捕获类型错误:不是函数
我有一个任务要写一个脚本,它需要用户出生的月份、日期和年份。然后它计算出这个人的年、月、日、小时和分钟数。此外,还应计算到下一个生日的天数。我已经编写了一个名为leapYear()的函数,它通过几个等式来检查年份是否是闰年,并且运行良好,但是如果我尝试在另一个函数中多次调用该函数,我会得到“Uncaught TypeError:leapYear不是函数”。有人能告诉我哪里出了问题吗 提前谢谢 index.htmlJavascript未捕获类型错误:不是函数,javascript,typeerror,Javascript,Typeerror,我有一个任务要写一个脚本,它需要用户出生的月份、日期和年份。然后它计算出这个人的年、月、日、小时和分钟数。此外,还应计算到下一个生日的天数。我已经编写了一个名为leapYear()的函数,它通过几个等式来检查年份是否是闰年,并且运行良好,但是如果我尝试在另一个函数中多次调用该函数,我会得到“Uncaught TypeError:leapYear不是函数”。有人能告诉我哪里出了问题吗 提前谢谢 index.html <!DOCTYPE html> <html> &l
<!DOCTYPE html>
<html>
<head>
<title>HTML 5 Template</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="stylesheet" href="style.css" type="text/css" />
<!-- USE ONLY IF using author's modernizr JavaScript file -->
<script type="text/javascript" src="modernizr.js"></script>
<!-- USE ONLY IF using external JavaScript file -->
<script type="text/javascript" src="functions.js"></script>
<script type="text/javascript">
<!-- USE ONLY IF using document level JavaScript -->
</script>
</head>
<body>
<div id="form">
<h1>Age Calculator</h1>
<h2>Enter Your Birthdate:</h2>
<form method="get" onsubmit="return false">
<p>
<label for="day">Day:</label><br>
<select name="day" id="day">
<script> dayList(); </script>
</select>
</p>
<p>
<label for = "month">Month:</label><br>
<select name="month" id="month">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
<option value="4">April</option>
<option value="5">May</option>
<option value="6">June</option>
<option value="7">July</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">October</option>
<option value="11">November</option>
<option value="12">December</option>
</select>
</p>
<p>
<label for="year">Year:</label><br>
<select name="year" id="year">
<script> yearList();</script>
</select>
</p>
<p class="left">
<input type="submit" value="Calculate" onclick="ageCalc()">
<input type="reset" value="Reset">
</p>
</form>
</div>
<div id="results">
<p>
You've been living for: <br>
<p id="yearsLived"></p> Years, <br>
<p id="monthsLived"></p> Months, <br>
<p id="daysLived"></p> Days, <br>
<p id="hoursLived"></p> Hours, and <br>
<p id="minLived"></p> Minutes. <br>
<p id="daysTillBD"></p> Days till your birthday.
</p>
</div>
</body>
</html>
有几件事你做错了 首先,请记住,在JavaScript中,如果您这样做:
leapYear = true;
写入名为leapYear
的全局变量,而不是绑定到当前函数范围的变量。要写入局部变量,您应该
var leapYear = true;
同一函数中该行之后进入leapYear
的所有赋值和引用都将写入局部变量,而不是全局变量
其次,记住javascript中的函数可以存储到类似于整数或字符串的变量中。因此,在编写函数leapYear
时,需要声明一个存储函数的变量leapYear
。当您写入leapYear=true
时,您将覆盖该变量,而不是它存储布尔值。如果您随后尝试调用leapYear()
则会出现错误,因为现在leapYear
存储的是布尔值,而不是函数,布尔值不可调用
因此,要解决您的问题,您可以使用
var
预先设置leapYear=false
。但是,在您的特定情况下,您可以只删除leapYear=false
和leapYear=true
行,因为您以后不会使用这些值。最后一点注意:如果您的意图是返回该值,那么应该编写returnfalse代码>而不是leapYear=false代码>(例如,这是在Delphi中返回值的正确方法)。您的代码为什么包含同名的de变量函数(leapYear)有问题。更改变量ou函数的名称,然后运行新测试
看看这个例子:
h1{
字体大小:15px;
颜色:蓝色;
文本对齐:居中;
}
氢{
字体大小10px;
文本缩进:150px;
}
形式{
保证金:自动;
宽度:80%;
}
#形式{
宽度:50%;
高度:250px;
保证金:自动;
边框:5px黑色双色;
}
#表格p{
宽度:33%;
文本对齐:居中;
浮动:左;
保证金:0,自动;
}
#左表{
浮动:对;
}
#结果{}
//全局变量
变量日期=新日期();
var currentMin=date.getMinutes();
var currentHour=date.getHours();
var currentDay=date.getDate();
var currentMonth=date.getMonth()+1;
var currentYear=date.getFullYear();
var月={
1: 31,
2: 28,
3: 31,
4: 30,
5: 31,
6: 30,
7: 31,
8: 31,
9: 30,
10: 31,
11: 30,
12: 31
};
//填写日表格数据
函数dayList(){
var计数器=1;
而(计数器=1950){
文件。写(“+计数器+”);
var计数器=计数器-1;
}
};
//检查出生年份是否为闰年
功能leapYearCalc(生日){
var num=(出生年份/4)%1;
变量num2=(出生年份/100)%1;
变量num3=(出生年份/400)%1;
如果(num==0 | |(num2==0&&num3==0)){
daysInYear=366;
月[2]=29;
闰年=真;
}否则{
daysInYear=365;
月[2]=28;
年份=假;
}
};
//年龄计算器
函数ageCalc(){
var birthDay=parseInt(document.getElementById('day').value);
var birthMonth=parseInt(document.getElementById('month').value);
var birthYear=parseInt(document.getElementById('year').value);
var YearsLive=当前年份-出生年份;
var-monthslive=0;
var daysLived=0;
var Hourslive=当前小时;
var minlive=currentMin;
var daysTillBD=0;
var计数=0;
//离生日还有几天
leapYearCalc(当前年度);
如果(出生月<当前月){
daysTillBD=月[currentMonth]-当前日;
var testMonth=当前月份;
while(testMonth!=12){
testMonth++;
daysTillBD=daysTillBD+月[testMonth];
}
var testYear=当前年份+1;
leapYearCalc(测试年);
testMonth=1;
while(testMonth!=生日月){
daysTillBD=daysTillBD+月[testMonth];
testMonth++;
}
daysTillBD=daysTillBD+(生日-1);
}else if(生日月>当前月){
daysTillBD=月[currentMonth]-当前日;
var testMonth=currentMonth+1;
while(testMonth!=生日月){
daysTillBD=daysTillBD+月[testMonth];
testMonth++;
}
daysTillBD=daysTillBD+(生日-1);
}否则{
如果(生日<当前日期){
daysTillBD=月[currentMonth]-当前日;
var testMonth=currentMonth+1;
while(testMonth!=生日和testMonth当前日期){
daysTillBD=生日-当前日期;
}
}
//结果显示
document.getElementById('yearsLived')。innerHTML=yearsLived;
document.getElementById('monthLive')。innerHTML=monthLive;
document.getElementById('daysLived')。innerHTML=daysLived;
document.getElementB
leapYear = true;
var leapYear = true;