为什么在定时提示后不打印变量“nyFrukt”

时间:2015-02-03 12:31:55

标签: javascript arrays document.write

var frukt = ["banan", "Äpple", "Apelsin"];


document.write("<p>Din lista med frukt inehåller för närvarande " + frukt + ".</p>");
document.write("<p>Den första frukten i listan är " + frukt[0] + ".</p>");
document.write("<p>Den nya frukten i listan är " + frukt[frukt.length - 1] + ".</p>");

//上面的代码工作正常,但下面的计时器不是

setTimeout(function () { var nyFrukt = prompt("Vad är den nya frukten?"); }, 3000);

//下面的document.write不打印“nyFrukt”

document.write("<p>Den nya frukten i listan är " + nyFrukt + ".</p>");

2 个答案:

答案 0 :(得分:2)

JavaScript使用函数作用域,您的变量nyFrukt在setTimeout函数中使用的匿名函数内声明,因此当您尝试在以下document.write函数中引用它时,它不再在范围内。

只需在共享范围内声明nyFrukt就可以了:

setTimeout(function () {
  var nyFrukt = prompt("Vad är den nya frukten?");
  document.write("<p>Den nya frukten i listan är " + nyFrukt + ".</p>");
}, 3000);

答案 1 :(得分:0)

你做错了什么:

  • 在您真正提出问题之前,您正尝试将答案写入页面。

  • 因为您创建了&#34; nyFrukt&#34;在匿名函数中的变量,它在全局范围内是不可访问的。

您的代码的修改版本:

var frukt = ["banan", "Äpple", "Apelsin"];

document.write("Din lista med frukt inehåller för närvarande " + frukt + ".<br /><br />");

document.write("Den första frukten i listan är " + frukt[0] + ".<br /><br />");

setTimeout(function () {
  var nyFrukt = prompt("Vad är den nya frukten?");

  // Push the result to your "frukt" array.
  frukt.push(nyFrukt);

  // Display the last value of the array.
  document.write("Den nya frukten i listan är " + frukt[frukt.length - 1] + ".<br /><br />");

}, 3000);

JSBin: http://jsbin.com/xaqohefume/1/edit?js,output

链接到我建议您阅读的一些文章: