我正在从这个页面学习javascript示例,
http://nofunc.org/AJAX_Star_Rating
我的问题是(1),
对于函数函数XY(e,v),它有两个输入参数e和v,但只用一个参数x = XY(e)调用它,它是如何工作的?
问题(2),我对XY函数在下面做了什么感到困惑,特别是对语法{'X':e.pageX,'Y':e.pageY}
和v?o[v]:o
感到困惑,有人能解释它们的意思吗?
var o=agent('msie')?{'X':event.clientX+document.documentElement.scrollLeft,'Y':event.clientY+document.documentElement.scrollTop}:{'X':e.pageX,'Y':e.pageY}; return(v?o[v]:o); }
提前谢谢,
乔治
答案 0 :(得分:1)
JavaScript在形式参数和活动参数之间存在非常松散的耦合。您的函数function XY(e,v)
实际上可以使用任意数量的参数进行调用。未在呼叫站点“填充”的参数将获得特殊值undefined
。当使用比参数列表中的参数更多的参数调用函数时,可以通过特殊变量arguments
访问这些额外参数。这是调用函数的所有活动参数的Array-ish对象。 (所以,包括那些没有名字的人。)
关于第二个问题,{}
是对象文字符号。您基本上在那里创建一个对象,然后设置其X
和Y
属性。
v?o[v]:o
构造是if-then-else的ternary operator。在伪代码中,您可以将其读作if v then o[v] else o
。 (这与C / C ++类似,如果你以前见过它。)
答案 1 :(得分:1)
function XY(e,v)
是一个事件处理程序。第一个参数是传递给函数的事件对象,第二个是受影响的元素。触发相关事件时,Javascript会自动调用该函数。
{'X':e:pageX, 'Y':e:pageY}
只是键值对。本质上,“数组”具有每个元素的标识符和对应于该标识符的值。严格来说,Javascript没有“数组”。他们被称为对象。标识符称为属性。
v?o[v]:o
转换为if (v) return o[v]; else return o;
三元表达式,因为它们已知,也出现在最后一行。 if (agent('msie')) var o={'X':event...}; else var o={'X':e.pageX,...};