JQUERY内定义的函数,不能运行,提示not defined?

netitgo 2019-03-02 04:16:04

$(document).ready(function() {
var time = 10;
function coolDown() {
window.setTimeout('coolDown()', 1000);
if (time > 0) {
timer.html(time);
time--;
} else if (time = 0) {
window.location.href = 'index.php';
}
}
coolDown();
});


但是这样运行之后 ,chrome提示coolDown is not defined..

这个涉及到闭包?本人菜鸟,想大家告诉我这个是哪方面的JS知识。。谢谢
...全文
344 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
netitgo 2019-03-02
  • 打赏
  • 举报
回复
谢谢您!感谢你详细的回复! 我感觉又对JS有深一层认识
天际的海浪 2019-03-02
  • 打赏
  • 举报
回复
引用 7 楼 netitgo 的回复:
setTimeout()的第一个参数直接设置一个函数就直接放函数名coolDown,而不是coolDown()吗?这个是什么原理?
JS中的函数是一种叫做Function引用类型的实例,因此函数是一个对象。函数名则是指向这个对象的引用地址。 做为一个对象,函数是可以赋值传递的。 setTimeout和setInterval方法的第一个参数所需要的是函数对象的引用地址。 函数名后面不加圆括号()就是获取函数对象的引用地址,(这样不调用执行函数)。 如: setInterval(foo,10); 表示把函数foo这个对象的引用地址赋值给setInterval方法的第一个参数。 函数名后面的圆括号()实际上是调用(执行)函数的运算符。 如果函数名后面加上圆括号就表示立即调用(执行)这个函数里面的代码。 如: setInterval(foo(),10); 表示立即调用(执行)foo函数,并将函数执行后的return返回值(没有return会返回undefined)赋值给setInterval方法的第一个参数。
netitgo 2019-03-02
  • 打赏
  • 举报
回复
setTimeout()的第一个参数直接设置一个函数就直接放函数名coolDown,而不是coolDown()吗?这个是什么原理?
天际的海浪 2019-03-02
  • 打赏
  • 举报
回复
setTimeout()的第一个参数如果是字符串,这个字符串中的代码执行时是在全局环境下执行的。 而你的coolDown()是处于另一个函数局部作用域(闭包)内。在全局环境下是访问不到。 要把coolDown()放到ready(function() {外面才能访问到。 或者象我那样setTimeout()的第一个参数直接设置一个函数
netitgo 2019-03-02
  • 打赏
  • 举报
回复
我参考的例子在这里https://www.cnblogs.com/66-88/articles/7470586.html
netitgo 2019-03-02
  • 打赏
  • 举报
回复
嗯嗯,你的例子行了!! 为什么我看例子,里面是 window.setTimeout('closeWindow()',1000); 也可以运行,但是我只改里面closeWindow()函数名却不行了? 一定要去掉引号?
天际的海浪 2019-03-02
  • 打赏
  • 举报
回复

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
	<title> 页面名称 </title>
</head>
<body>
<script type="text/javascript" src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    var time = 10;
    var timer = $("#timer");
    function coolDown() {
        window.setTimeout(coolDown, 1000);
        if (time > 0) {
            timer.html(time);
            time--;
       } else if (time == 0) {
            window.location.href = 'index.php';
       }
 }
coolDown();
});
</script>
<div id="timer"></div>
</body>
</html>
netitgo 2019-03-02
  • 打赏
  • 举报
回复
引用 1 楼 天际的海浪 的回复:
window.setTimeout(coolDown, 1000);
也是提示undefined...
天际的海浪 2019-03-02
  • 打赏
  • 举报
回复
window.setTimeout(coolDown, 1000);

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧