2016-12-20 108 views
-1

我的JavaScript的性能富:遗漏的类型错误:无法读取未定义

todo.completed = !todo.completed; 

错误:

Uncaught TypeError: Cannot read property 'completed' of undefined 
    at Object.toggleCompleted (script.js:34) 
    at Object.toggleCompleted (script.js:89) 
    at HTMLButtonElement.onclick ((index):33) 
toggleCompleted @ script.js:34 
toggleCompleted @ script.js:89 
onclick @ (index):33 

这里我错过什么?

+4

更换<script src = "filename.js></script> 你宣布'todo',比如'VAR待办事项= {}' –

+1

的错误是非常自我解释。那又怎样让你困惑? – Taplar

回答

0

看起来你还没有声明变量待办事项。尝试像todo = {};让我知道如果你有问题!

0

变量todo已经通过了范围。它可能在一个函数中被声明,该函数在调用handlers.toggleCompleted()时被关闭。

有一对夫妇的方式来解决这个问题,但最简单的,你可以只是做todo全球:

  1. 查找var todo并从一开始就删除var
  2. 在你的JS的顶部添加var todo = {};

这将使todo这总是你的页面上定义一个全局对象。

+0

@ mb432这可能适合你,但这是一个不好的习惯。如果你现在开始使用它,那么就应该有一个很大的思路来学习处理这个问题的更好方法,而不是这个想法。您需要查看命名空间和其他选项,以使其成为更安全,更可持续的解决方案。但是,现在,如果它有效,那就使用它。不要让完美成为足够好的敌人。 – jwpfox

+0

@jwpfox是的,完全是这样。当OP不理解范围和封闭时,您正在谈论最佳实践。坚持全球变革是解决这个问题的蹩脚方式,但它是最简单的。 – Keith

0

有什么让人困惑的是,由于这些站点的路由设置方式,代码将在Plunkr,毛刺或代码本中工作,但不是文本编辑器和浏览器。在你的index.html文件,你需要用 <script src="entire path to filename.js"></script>

相关问题