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

2013-06-04 11:25:10 +08:00
 Part
表示很奇怪的语法,今天想把它弄清楚。
4794 次点击
所在节点    程序员
8 条回复
foru17
2013-06-04 11:31:35 +08:00
这就就是jquery自带的函数么
66beta
2013-06-04 11:36:27 +08:00
楼主可以看jquery文档:


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

jQuery 代码:

$.getJSON("test.js", function(json){
alert("JSON Data: " + json.users[3].name);
});
cutehalo
2013-06-04 11:37:42 +08:00
就是把getJSON的回调函数放到外面了
和楼上的其实是一样的
Part
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
2013-06-04 13:34:11 +08:00
@Part 函数这里被作为参数传入,如果带了括号,就意味着执行次函数然后把结果作为参数传入了。这个不算js的特点吧,支持传函数的语言应该都这样
yimity
2013-06-04 14:37:45 +08:00
这就是 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
2013-06-04 18:59:47 +08:00
这是把函数传进去,jQuery里面调用的啊。。
是jQuery调用你这个回调函数的时候,把json这个参数传进去的。
Part
2013-06-04 19:22:59 +08:00
@yimity thx,这下深刻了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/71153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX