Javascript JS范围问题,其中2个变量不';I don’我的行为似乎不一样
下面的代码让我很不安:Javascript JS范围问题,其中2个变量不';I don’我的行为似乎不一样,javascript,scope,Javascript,Scope,下面的代码让我很不安: define('TodoItem', function() { var Component = require('Component') var app = require('application').app var merge = $.extend var TodoItem = Component.extend( { template : 'todo-item-template', event
define('TodoItem', function()
{
var Component = require('Component')
var app = require('application').app
var merge = $.extend
var TodoItem = Component.extend(
{
template : 'todo-item-template',
events :
{
'button.completed click' : 'markAsCompleted',
'button.delete click' : 'remove'
},
getInitialState : function()
{
var initial =
{
uuid : undefined,
text : '',
completed : false
}
return initial
},
markAsCompleted : function(evt)
{
if (this.root)
{
var test = merge({}, this.getInitialState(), { whatever : 'whatever' })
app.completeTodo(this.model.uuid)
}
}
}
}
执行markAsCompleted()
时,merge
被调用,但不知何故,调用app.completeTodo()
会抛出一个未捕获的类型错误:无法读取未定义的的属性“completeTodo”(而app确实是未定义的)
app
作为对对象的引用,其值更改的唯一方法是同时更改引用的对象。然而,require('application')。app
的计算结果仍然是它应该计算的对象
这似乎是一个简单的JS问题,我有点误解,但我无法理解
提前感谢您的帮助 markAsCompleted
在哪里被称为您的代码?不可能完全从您的代码中分辨出来-但可能是require代码是异步运行的-所以require('application')。当您将app分配给app时,app是未定义的。require()做什么?是的,异步调用了markAsCompleted()。现在修复了:我确实检查过require('application')以前被调用过(它确实被调用过),并且它确实被定义过,但后来我打了.app,忘记了检查它的值。谢谢各位,对不起