2014-03-28 52 views
1

JavaScript的新功能在这里。在函数内部和外部定义变量的区别

团队博客树对如何建立在javascript计时器的小教程。它基本上是以下代码:

<h1 id="timer">Loading</h1> 

var updateMessage = function(){ 
    var date = Date(); 
    var message = document.getElementById("timer"); 
    message.innerHTML = "The time is " + date; 
} 

var timer = setInterval(updateMessage, 500); 

这工作正常,所有。不过,我想使用date来实现多种功能。我试过以下...

var date = Date(); 
var updateMessage = function(){ 
    var message = document.getElementById("timer"); 
    message.innerHTML = "The time is " + date; 
} 

..但现在它不能实时工作。每当我点击F5它会给出正确的时间,但它不再实时更新。

这是为什么?我认为,当我在一个函数之外声明一个变量时,它将成为一个可以在任何地方使用的全局函数。

+0

我在谈论同样的例子。我只是将'var date = Date();'移到函数的外部,并且它停止工作。 –

+0

是的,我很抱歉,我把它解释为答案。 –

回答

2
var date = Date(); 
var updateMessage = function(){ 
    var message = document.getElementById("timer"); 
    message.innerHTML = "The time is " + date; 
} 

在上述情况下var date变量,其值时脚本加载被分配。

,并在另一种情况下var date是分配所有时间当updateMessage被称为

var updateMessage = function(){ 
    var date = Date(); 
    var message = document.getElementById("timer"); 
    message.innerHTML = "The time is " + date; 
} 
5

因为Date()是你怎么称呼它的时候,它不会不断更新!

如果你想分享它,请在函数内部更新它。

var date; 
var updateMessage = function(){ 
    date = new Date(); 
    var message = document.getElementById("timer"); 
    message.innerHTML = "The time is " + date; 
} 
+0

这很有道理。谢谢你的光芒! –

2
var date = Date(); 

脚本加载时只执行一次。变量日期在网页的整个生命周期中保持不变。这就是为什么只有刷新页面时才会更改。

0

那么你在第二个例子中缺少setInterval?

除此之外,你是在正确的轨道上,但有一个小问题:你现在正在做的方式,当你加载页面时,你会得到Date(),并使用相同的日期和过度。

像这样的东西应该为你工作,因为它会给你而dinamically更改日期的全局变量:

var date = Date(); 
var updateMessage = function(){ 
    date = Date(); 
    var message = document.getElementById("timer"); 
    message.innerHTML = "The time is " + date; 
} 
+0

为什么downvote? –

1

这里的问题是不是在其中定义date变量,但其中又有多少次你正在调用Date()函数。

声明它,但在全球范围进行必要的通话每次你需要也是一个有效的解决方案。

var date; // declaration 

var updateMessage = function(){ 
    var message = document.getElementById("timer"); 
    date = Date(); // call to Date() everytime updateMessage is executed 
    message.innerHTML = "The time is " + date; 
} 
相关问题