在从ruby脚本编译coffeescript文件时,
我的应用程序中的示例代码
$( () =>
rest_api_login((login_ok, userName, userRoles) ->
console.log("login_ok #{login_ok}, userName #{userName}, roles [#{userRoles.join(", ")}]")
vcm.app.userName = userName
vcm.app.userRoles = userRoles
vcm.app.defaultClassifications = []
initialize_templates((loaded_templates) ->
console.log("loaded_templates", loaded_templates)
vcm.app.main_application()
)
)
)因此,在将其编译为js时,有一个不同之处。上一次提交代码大约是2-3年前,开发人员不在编译最后一个文件的公司中。编译中几乎没有什么变化,因为ex: a!=b现在被编译为!(a==b),所以没有什么主要的编译方式。
因此,在我编译的文件中,输出js文件是:
$(function() {
return rest_api_login(function(login_ok, userName, userRoles) {
console.log("login_ok " + login_ok + ", userName " + userName + ", roles [" + (userRoles.join(", ")) + "]");
vcm.app.userName = userName;
vcm.app.userRoles = userRoles;
vcm.app.defaultClassifications = [];
return initialize_templates(function(loaded_templates) {
console.log("loaded_templates", loaded_templates);
return vcm.app.main_application();
});
});
});较早编译的文件具有以下js:
$((function(_this) {
return function() {
return rest_api_login(function(login_ok, userName, userRoles) {
console.log("login_ok " + login_ok + ", userName " + userName + ", roles [" + (userRoles.join(", ")) + "]");
vcm.app.userName = userName;
vcm.app.userRoles = userRoles;
vcm.app.defaultClassifications = [];
return initialize_templates(function(loaded_templates) {
console.log("loaded_templates", loaded_templates);
return vcm.app.main_application();
});
});
};
})(this));因此,我的js没有返回语句和对应的this关键字,该关键字存在于先前编译的文件中。
这适用于我完整的js文件,它有超过15000行,
我试着用几乎所有的gem版本编译它,coffee-script,当前编译的版本来自2.2.0。任何帮助都将不胜感激。
发布于 2016-09-02 13:20:18
区别在于您的新代码使用了=>,而旧代码使用了带有->的普通函数声明。使用fat箭头,新声明函数的this必然是外部作用域的this。这真的对回调很有帮助。
在这种情况下,fat箭头不会产生任何效果,因为没有引用this,并且传递给rest_api_login的回调定义了一个新的作用域。这是不必要的,您应该将=>替换为->。这将生成原始代码(sans次要语言更改)。
https://stackoverflow.com/questions/39291441
复制相似问题