http://jsfiddle.net/sidonaldson/ZuPYM/
(function() {
if (window.DeviceOrientationEvent)
{
$("e").innerHTML = "DeviceOrientationEvent";
window.addEventListener('deviceorientation', function(e)
{
// y-axis - yaw
var g = e.gamma || 0;
// x-axis - tilt
var b = e.beta || 0;
// z=axis - swivel
var a = e.alpha || 0;
// degree north
var c = e.compassHeading || e.webkitCompassHeading || 0;
// accuracy in deg
var accuracy = e.compassAccuracy || e.webkitCompassAccuracy || 0;
deviceOrientationHandler(g, b, a, c, accuracy);
}, false);
}
else
{
$("e").innerHTML = "NOT SUPPORTED #FAIL";
}
})();
(function(...) {...}) ();
这里发生的事情我从未见过像这样声明的函数。 $
是否使用其他语言中的_
等变量名称function('e')
发生的事情。答案 0 :(得分:2)
这是IIFE。基本上,此函数将立即执行,而不会被显式调用。一旦你对javascript更加满意,我强烈建议你阅读IIFE(立即调用函数表达式)的链接
$代表jQuery。它是一个用于HTML操作的javascript库。在javascript中,$和_以及更多非字母数字字符也经常用于定义变量。通常,$
代表jQuery(但你也可以将它用于其他任何东西)。同样,_
代表underscore.js。
此功能不会“继续循环”。这是一个倾听者。它会侦听DeviceOrientationEvent
事件,并仅在设备方向更改时执行。
看来你对javascript很新。我建议你在深入了解jQuery之前获得一些JS经验
答案 1 :(得分:2)
1)为什么函数的格式为(function(...){...})();这里发生了什么我从未见过像这样声明的函数。
这是一个所谓的IIFE(瞬时调用函数表达式),它基本上是一个未命名的函数,只有在编译器到达时才会被调用。
将其视为一个简单的命名函数:
function myFunc() {...my code...}
然后在声明后立即执行:
myFunc();
现在是IIFE:
(function() {...my code...})();
^--------------------------^^^
Parentheses to enclose the function, the last two are to invoke the function itself
2)是$在其他语言中使用像_一样的变量名
是的,但在这种情况下,它是一个函数,它只返回id为e
的元素(通常它是jQuery库,非常常见)。
3)这个函数如何继续循环,在C ++中你需要一段时间或者为函数('e')进行或者递归。
该函数不循环,只执行一次。
编辑:正如@Rup指出的那样,你可能指的是每次触发事件时执行处理程序的原因。这是可能的,因为window.addEventListener
函数为事件添加了处理程序(在本例中为deviceOrientation
),每次触发事件时都会调用该事件。有关更多信息,请参阅this page,MDN是获取JS信息的最佳位置(恕我直言)。
答案 2 :(得分:1)
您正在谈论的格式称为立即调用的函数表达式(IIFE)。它通常用在插件/库定义中,以使声明的函数成为窗口/文档的一部分或扩展现有的对象,如jquery。
$代表jQuery,_代表underscore.js,但它只取决于你传递的是什么参数。
每次触发事件deviceorientation时,都会执行您所引用的函数。这在javascript中称为回调或处理程序。
答案 3 :(得分:0)
1)这是一个匿名函数,可以立即调用和执行。
(function(argumentList) {
// body
})(provideArguments);
2)$是jQuery库声明的全局变量。
3)如果您使用jQuery,则可以直接影响查询的所有结果。该库将为您循环。例如,此代码将选择所有锚标记,foreach标记将执行addClass方法,将类“myClassName”放入“查询”的结果。
$('a').addClass('myClassName');
答案 4 :(得分:0)
(function(...) {...}) ();
这意味着代码将直接在页面中执行。
$
这是Jquery选择器。 cf:http://api.jquery.com/category/selectors/
e
这是一个事件对象。 cf:http://api.jquery.com/category/events/event-object/