Javascript 在函数内部和外部定义变量的区别

Javascript 在函数内部和外部定义变量的区别,javascript,Javascript,这里是javascript的新手 TeamTreehouse博客有一个关于如何用javascript构建计时器的小教程。基本上是以下代码: <h1 id="timer">Loading</h1> var updateMessage = function(){ var date = Date(); var message = document.getElementById("timer"); message.innerHTML = "The time is

这里是javascript的新手

TeamTreehouse博客有一个关于如何用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);
…但现在它不能实时工作。无论何时我点击F5,它都会返回正确的时间,但不再实时更新

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

因为
Date()
是您调用它的时间,它不会一直更新

如果要共享它,请在函数内部更新它

var date;
var updateMessage = function(){ 
   date = new Date();
  var message = document.getElementById("timer");
  message.innerHTML = "The time is " + date;
}
因为
Date()
是您调用它的时间,所以它不会一直更新

如果要共享它,请在函数内部更新它

var date;
var updateMessage = function(){ 
   date = new Date();
  var message = document.getElementById("timer");
  message.innerHTML = "The time is " + date;
}
在上述情况下,
var date
是一个变量,其值是在加载脚本时指定的

在另一种情况下,当调用updateMessage时,
var date
被分配到所有时间

var updateMessage = function(){ 
  var date = Date();
  var message = document.getElementById("timer");
  message.innerHTML = "The time is " + date;
}
在上述情况下,
var date
是一个变量,其值是在加载脚本时指定的

在另一种情况下,当调用updateMessage时,
var date
被分配到所有时间

var updateMessage = function(){ 
  var date = Date();
  var message = document.getElementById("timer");
  message.innerHTML = "The time is " + date;
}
仅在加载脚本时执行一次。可变日期在网页的整个生命周期内保持不变。这就是为什么它只有在刷新页面时才会更改


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

在第二个示例中,您缺少setInterval

除此之外,您的思路是正确的,但有一个小问题:您现在的做法是,在加载页面时获取日期(),并反复使用相同的日期

这样的方法应该适合您,因为它会在动态更改日期的同时为您提供一个全局变量:

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

在第二个示例中,您缺少setInterval

除此之外,您的思路是正确的,但有一个小问题:您现在的做法是,在加载页面时获取日期(),并反复使用相同的日期

这样的方法应该适合您,因为它会在动态更改日期的同时为您提供一个全局变量:

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

这里的问题不是定义
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;
}

这里的问题不是定义
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;
}

我说的是同一个例子。我刚刚移动了
var date=date()到函数外部,它停止工作。是的,我道歉,我解释了它作为一个答案。我谈论的是同一个例子。我刚刚移动了
var date=date()到函数外部,它停止工作。是的,我道歉,我解释了它作为一个答案。这是有道理的。谢谢你给我点启示!这是有道理的。谢谢你给我点启示!