V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Part
V2EX  ›  程序员

这里的这个json变量是如何被传进去的? function test(json){ alert("JSON Data: " + json.data); } $.getJSON("test.js",test);

  •  
  •   Part · 2013-06-04 11:25:10 +08:00 · 4875 次点击
    这是一个创建于 4190 天前的主题,其中的信息可能已经有所发展或是发生改变。
    表示很奇怪的语法,今天想把它弄清楚。
    8 条回复    1970-01-01 08:00:00 +08:00
    foru17
        1
    foru17  
       2013-06-04 11:31:35 +08:00 via Android
    这就就是jquery自带的函数么
    66beta
        2
    66beta  
       2013-06-04 11:36:27 +08:00   ❤️ 1
    楼主可以看jquery文档:


    从 test.js 载入 JSON 数据并显示 JSON 数据中一个 name 字段数据。

    jQuery 代码:

    $.getJSON("test.js", function(json){
    alert("JSON Data: " + json.users[3].name);
    });
    cutehalo
        3
    cutehalo  
       2013-06-04 11:37:42 +08:00   ❤️ 1
    就是把getJSON的回调函数放到外面了
    和楼上的其实是一样的
    Part
        4
    Part  
    OP
       2013-06-04 13:31:24 +08:00
    @66beta
    @cutehalo

    和平时对函数的理解很不一样,例如


    function do_something(data){
    alert(data);
    }

    调用是这样的:
    do_something('nothing to do!');

    而js里 直接写 do_something 传入此函数,它不带括号,并且连这个函数有参数都省略了,这个非常不解。
    zhangxiao
        5
    zhangxiao  
       2013-06-04 13:34:11 +08:00   ❤️ 1
    @Part 函数这里被作为参数传入,如果带了括号,就意味着执行次函数然后把结果作为参数传入了。这个不算js的特点吧,支持传函数的语言应该都这样
    yimity
        6
    yimity  
       2013-06-04 14:37:45 +08:00   ❤️ 1
    这就是 js 里面 函数 是一等公民的意思,函数可以做任何其他数据类型可以做的事情。
    function test(json){ alert("JSON Data: " + json.data); }
    如果不执行的话, test 就可以理解为 test = ' function test(json){ alert("JSON Data: " + json.data); } ' ,注意等号右边的单引号,也就是 test 可以理解为是整个字符串(只是可以这么理解,但实际上并不是这样,test 只是对函数代码的引用)。
    那么 对于这样的函数来说,
    function a(x,y){ y(x) }
    x 是参数,y 是函数引用,x 又作为 y 的参数而存在,那么就好理解了。
    skydiver
        7
    skydiver  
       2013-06-04 18:59:47 +08:00   ❤️ 1
    这是把函数传进去,jQuery里面调用的啊。。
    是jQuery调用你这个回调函数的时候,把json这个参数传进去的。
    Part
        8
    Part  
    OP
       2013-06-04 19:22:59 +08:00
    @yimity thx,这下深刻了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   958 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:29 · PVG 04:29 · LAX 12:29 · JFK 15:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.