【问题标题】:JS - var undefinedJS - 变量未定义
【发布时间】:2017-06-21 06:57:54
【问题描述】:

我想对所有 3 个函数(newQuote、postFB 和 tweet)使用相同的 var randomQuote,但这似乎不起作用。

如果我把它放在 newQuote 函数中,只有这个函数可以工作,如果只在外面 - 只有共享函数可以工作,并且 newQuote 只会在点击时更改一次报价 (?)。

我可以让所有 3 个函数都工作的唯一方法是,如果我重复它——一个在 newQuote 函数内部,一个在 newQuote 函数外部——有什么方法可以让它“干燥”吗?

var randomQuote = Math.floor(Math.random() * (quotes.length)); //outside 
document.getElementById("refresh").onclick = newQuote;
 function newQuote() { 
var randomQuote = Math.floor(Math.random() * (quotes.length)); //inside


document.getElementById("facebook").onclick = postFB; 
function postFB() {
var url = "http://www.facebook.com/sharer/sharer.php?u=" + encodeURIComponent(quotes[randomQuote]);
  window.open(url);
}
  • 此处不包含 twitter 功能 - 与 FB 相同的想法

任何建议我(初学者)做错了什么?先感谢您!

【问题讨论】:

  • 您的 newQuote 函数调用应该包含用于刷新 onclick 事件的括号。此外,您的 newQuote 函数需要一个右花括号。至于在外部声明后访问 newQuote 内部的 randomQuote...只需将 randomQuote 作为参数传递给 newQuote 并在函数内部使用它执行您需要的操作。
  • 感谢您的回复! newQuote with parenthesis?hmm - js book:“与内联事件处理不同,“=”后面的函数名不在引号中/函数名后面没有括号”/我还是尝试了这个-不起作用//缺少大括号- 只是没有复制到这里 /chrome 控制台对于查找此类错误非常有帮助。不确定我是否理解“传递并做我必须对函数做的事情” - 试图作为参数传递 - 弄乱了我的照片/如果我用这行代码重复自己,它的唯一工作方式:( 代码链接@ 987654321@

标签: undefined var


【解决方案1】:

使用let 而不是var 来声明您的变量可能会解决您的问题。这两者的区别在here详细描述;相关的想法(取自链接的帖子)是

var 作用于最近的功能块,let 作用于最近的封闭块(如果在任何块之外,两者都是全局的),它可以小于一个功能块。

【讨论】:

  • 感谢您的回复!我之前确实尝试过 let - 没有工作/与 var 相同,只有共享功能似乎工作/这里是整个代码:codepen.io/AsiaKo/pen/ybgxQY
猜你喜欢
  • 1970-01-01
  • 2018-11-13
  • 2018-03-01
  • 2023-01-26
  • 2015-11-23
  • 2014-11-03
  • 2020-06-07
  • 1970-01-01
  • 2011-06-11
相关资源
最近更新 更多