Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS范围问题,其中2个变量不';I don’我的行为似乎不一样_Javascript_Scope - Fatal编程技术网

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,忘记了检查它的值。谢谢各位,对不起