【问题标题】:javascript variable shows in console.log but not in browser outputjavascript 变量显示在 console.log 中,但不在浏览器输出中
【发布时间】:2019-01-19 19:34:57
【问题描述】:

我正在尝试重用 year 变量的输出。 稍后我将需要在多个函数中重用更新后的值 [基于 hashchange]。 它在浏览器控制台中显示正确的值,但它不显示在浏览器中。

<html>
<body>
<p></p>
<a href="#2018-01">1</a>
<a href="#2018-02">2</a>
</body>
<script>
location.hash = '#2019';
showHash();
var p = document.querySelector('p');
p.innerHTML = window.year;

function showHash() {
  return year = location.hash;  
}
window.onhashchange = showHash;
</script>
</html>

【问题讨论】:

  • year 不是对某物的引用;它是一个原始值,因此当您将其复制p.innerHTML 时,year 之后会发生什么并不重要——innerHTML 不会更新。你应该只做p.innerHTML = year inside showHash.
  • 在初始化之前你也在调用一个函数
  • @SuperDJ 声明在 JS 中被提升。没关系。
  • @trincot,什么是原始值?我知道它在哈希函数中工作,我只是希望以后能够在其他函数中重用返回值。我不想把所有的函数都粘在 showHash()
  • 看我的回答。另见primitive value

标签: javascript hashchange window-object


【解决方案1】:

通过将location.hash 分配给year,您不会修改p.innerHTMLyearp.innerHTML 没有引用彼此的值。当你初始化如下:

p.innerHTML = window.year;

year 的值被复制所以现在你有两个值在那个时候碰巧是相同的,但它们没有链接,所以如果你要为一个,它也会更新另一个。不,它们不是参考。

因此,在事件处理程序中,您还应该将新哈希分配给p.innerHTML,或者更好——因为哈希是文本——将其分配给p.textContent

var p = document.querySelector('p');
var year;

function showHash() {
  // Assign both to textContent and year (they are independent)
  p.textContent = year = location.hash;
  // Maybe call some other functions which need to know about `year`
  manage();
}

function manage() {
  console.log(year);
  // ... etc
}

window.onhashchange = showHash;

location.hash = '#2019'; // This triggers showHash, no need to call it explicitly
<p></p>
<a href="#2018-01">1</a>
<a href="#2018-02">2</a>

【讨论】:

  • 我还是不明白怎么在函数外访问year变量
  • 就像我做这样的事情:for (var i = 0; i
  • 嗯,它在事件第一次触发时 before 有一个未定义的值。您必须在该处理程序中调用您的进一步操作。
  • 所以所有东西都必须在需要访问年份变量的 showHash 函数中?
  • 是的,但是您当然可以从那里调用另一个函数,这样您就可以将代码分散到不同的函数中。我在答案中添加了一些代码来证明这一点。
猜你喜欢
  • 2016-12-18
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多