是否允许跳转到内部范围或兄弟范围内的标签?如果是这样,是否允许使用在该范围内声明的变量?
考虑以下代码:
int cond(void);
void use(int);
void foo()
{
{
int y = 2;
label:
use(y);
}
{
int z = 3;
use(z);
/* jump to sibling scope: */ if(cond()) goto label;
}
/* jump to inner scope: */ if(cond()) goto label;
}
Run Code Online (Sandbox Code Playgroud)
这些goto合法吗?
如果是这样,y当我跳转label并保持分配给它的最后一个值(2)时,保证存在?
或者允许编译器假设y在超出范围后不会被使用,这意味着单个内存位置可以用于y和z?
如果此代码的行为未定义,我如何让GCC发出警告?
我正在尝试手动触发change属于集合的 Backbone 模型上的事件。这是一个最小的例子:( JSFiddle )
var PersonModel = Backbone.Model.extend({});
var PersonCollection = Backbone.Collection.extend({
model: PersonModel
});
var person = new PersonModel({ name: 'Spike' });
var people = new PersonCollection([person]);
person.trigger('change'); // throws error
console.log('triggered event successfully');
Run Code Online (Sandbox Code Playgroud)
但当我触发事件时,出现以下错误:(在 JSFiddle 中,打开 Javascipt 控制台查看完整错误)
Uncaught TypeError: Cannot read property 'previousAttributes' of undefined
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
(我这样做的原因是,在实际代码中,模型有一个集合 - 例如person.things = new ThingCollection();- 我想在其集合更改时手动触发该change事件)person