V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
icexfire
V2EX  ›  问与答

coffeescript的不同写法( $ = jQuery // $ = @jQuery)

  •  
  •   icexfire · 2013-05-26 16:37:38 +08:00 · 3775 次点击
    这是一个创建于 4228 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚刚接触 coffee,求教 >.<

    这两种有什么不同么?
    两种的javascript 就是一个 $ = jQuery; 另一个 $ = this.jQuery;
    但是都是在 (function(){ }).call(this) 里面,

    另外还看到过一种写法:
    $ = require('jquery')
    这个又是什么状况呢?
    14 条回复    1970-01-01 08:00:00 +08:00
    tangzx
        1
    tangzx  
       2013-05-26 16:52:23 +08:00 via iPhone   ❤️ 1
    你都知道@jQuery等价于this.jQuery了吧?

    JavaScript在浏览器里运行时最外层的this指向window,故这几种写法没区别,如果直接贴在<script>里的话
    icexfire
        2
    icexfire  
    OP
       2013-05-26 17:08:58 +08:00
    @tangzx 也就是这几种都因为在 (function(){ }).call(this) 里面,所以 this 都不是指向 windows 的,都是指向那个匿名的 function()么?
    然后 @jquery 只是显式的表示出来了,这样么?

    那么 require 那个呢?
    icexfire
        3
    icexfire  
    OP
       2013-05-26 17:09:21 +08:00
    @livid 出现乱码了 囧
    icexfire
        4
    icexfire  
    OP
       2013-05-26 17:16:45 +08:00
    @tangzx 难道 $ = require('jquery') 这种是在coffee编译成js的时候自动解决添加依赖的jquery么?就不用手动在网页中载入 jq了? >.<
    insraq
        5
    insraq  
       2013-05-26 17:36:21 +08:00   ❤️ 1
    $ = require('jquery') 跟CoffeeScript没关系,是把jQuery wrap成了一个CommonJS module.
    icexfire
        6
    icexfire  
    OP
       2013-05-26 17:50:19 +08:00
    @insraq 但是 jquery 这个不是只能用在浏览器操作 dom 之类的操作么。。。CommonJS 不涉及这个吧?。。。那为什么要弄成 module?
    insraq
        7
    insraq  
       2013-05-26 17:59:38 +08:00   ❤️ 1
    jQuery可以用在node.js上的 http://blog.jquery.com/2013/04/09/jquery-2-0-beta-3-released/

    CommonJS只是一个module的组织方法,虽然不像AMD针对browser做了优化,但是也不是不可以用在browser中的,当然最主要还是用在node.js中。
    tangzx
        8
    tangzx  
       2013-05-26 20:36:35 +08:00 via iPhone   ❤️ 1
    function(){ }).call(this) 的意思是函数里面的this和外面的this(window)为同一个东西
    tangzx
        9
    tangzx  
       2013-05-26 20:39:19 +08:00 via iPhone   ❤️ 1
    官方原版的jQuery会同时绑定window.jQuery和局部变量jQuery,所以this.jQuery和直接jQuery效果一样
    tangzx
        10
    tangzx  
       2013-05-26 20:40:47 +08:00 via iPhone   ❤️ 1
    地铁&&手机上敲代码敲代码我容易么我
    icexfire
        11
    icexfire  
    OP
       2013-05-26 22:40:10 +08:00
    @tangzx "会同时绑定window.jQuery和局部变量jQuery" 这个是在哪里看到的呢?好奇~
    tangzx
        12
    tangzx  
       2013-05-26 23:01:15 +08:00   ❤️ 1
    @icexfire 这个确实是俺搞错了,你可以在firebug或者chromedev控制台里试一试window.a=1,然后直接调用a就能出1了,所以应该不是同时绑定,而是”就是一个东西“
    tangzx
        13
    tangzx  
       2013-05-26 23:02:26 +08:00   ❤️ 1
    (function($=this.jQuery;){ }).call(this) //正确
    (function($=this.jQuery;){ })() //错误,$会为undefined
    chuangbo
        14
    chuangbo  
       2013-05-27 00:54:05 +08:00 via iPad   ❤️ 1
    以楼主现在的 JS 程度,不需要纠结在这个细节上,先模仿吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2863 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:47 · PVG 20:47 · LAX 04:47 · JFK 07:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.