首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DIfference在将CoffeScipt文件编译成JS中的应用

DIfference在将CoffeScipt文件编译成JS中的应用
EN

Stack Overflow用户
提问于 2016-09-02 11:36:32
回答 1查看 41关注 0票数 1

在从ruby脚本编译coffeescript文件时,

我的应用程序中的示例代码

代码语言:javascript
复制
$( () =>
  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文件是:

代码语言:javascript
复制
$(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:

代码语言:javascript
复制
$((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行,

  1. 这种效果会不会妨碍应用程序的功能?
  2. 如果我想要生成之前生成的相同的js怎么办?

我试着用几乎所有的gem版本编译它,coffee-script,当前编译的版本来自2.2.0。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-09-02 13:20:18

区别在于您的新代码使用了=>,而旧代码使用了带有->的普通函数声明。使用fat箭头,新声明函数的this必然是外部作用域的this。这真的对回调很有帮助。

在这种情况下,fat箭头不会产生任何效果,因为没有引用this,并且传递给rest_api_login的回调定义了一个新的作用域。这是不必要的,您应该将=>替换为->。这将生成原始代码(sans次要语言更改)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39291441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档