这并不能完全回答我的问题,也可能不相关,因为它是 java 而不是 javascript:try、catch 和 finally 中的执行顺序是什么
我知道将 return 放入finally块中将优先于catch块中的 return ,但是序列事件如何与以下代码一起使用?
function confusion(){
var test = "a";
try{
return test;
}
finally{
test = "b";
}
}
console.log("Result", confusion()); //"a"
Run Code Online (Sandbox Code Playgroud)
我对返回任何东西的一般理解是控制通常返回到调用方法的上下文,因此继续执行的事实让我感到困惑。
在这种情况下,我认为它可能会像这样:
- 函数设置为返回test->finally更改值test->test返回更新后的值。
但相反,它似乎为该try块保留了某种状态并finally错过了时间?
我试图找到一种干净、可读的方法来管理 Phaser 类中跨函数的变量,但由于各种原因,我对我找到的解决方案不满意。
据我所知可用:
全局变量
我不太喜欢这种实现,因为其他文件可以访问变量的可能性。
var heroes = [];
var play = new Phaser.Class({
Extends: Phaser.Scene,
initialize: function(){
Phaser.Scene.call(this, {key: 'play'});
},
create: function () {
for(var i = 0; i < 5; i++){
heroes.add(new Hero())
}
},
update: function(){
if(!heroes.length){
heroes.add(new Hero())
}
heroes.forEach(function(hero){
if(hero.hp <= 0){
hero.destroy();
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
DataManager 类(作为注册表实现)
我更喜欢这个,因为它更受控制,但对我来说 DataManager 感觉它是用于配置的,而不是作为在类方法之间处理/共享数据的手段;使用特定服务来获取和设置其值时,访问和更新变量也感觉非常繁琐。
var play = new Phaser.Class({
Extends: Phaser.Scene,
initialize: function(){
this.registry.set('heroes', []);
Phaser.Scene.call(this, {key: 'play'});
},
create: function () {
var heroes …Run Code Online (Sandbox Code Playgroud)