难以理解javaScript函数的定义
Having trouble understanding this definition of javaScript function
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(...) {...}) ();
这里发生的事情我从来没有见过这样声明的函数 $
是否使用与其他语言中的_
类似的变量名- 这个函数是如何保持循环的,在C++中,您需要一段时间或for或递归
function('e')
的情况
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++中,你需要一段时间或for或递归函数('e')的情况。
该函数不循环,只执行一次。
EDIT:正如@Rup所指出的,您可能指的是为什么每次触发事件时都会执行处理程序。这是可能的,因为window.addEventListener
函数向每次触发事件时都会调用的事件(在本例中为deviceOrientation
)添加了一个处理程序。有关更多信息,请参阅此页面,MDN是获取JS信息的最佳位置(IMHO)。
-
这是IIFE。基本上,此函数将立即执行,而无需显式调用。一旦您对javascript更加熟悉,我强烈建议您阅读IIFE(立即调用函数表达式)的链接
-
$用于jQuery。它是一个用于HTML操作的javascript库。在javascript中,$和_以及更多非字母数字字符也经常用于定义变量。一般来说,
$
代表jQuery(但您也可以将其用于其他任何用途)。类似地,_
代表undercore.js. -
此函数不"保持循环"。它是一个倾听者。它侦听
DeviceOrientationEvent
事件,并且仅在设备方向发生变化时执行。
您似乎对javascript非常陌生。我建议您在深入jQuery
您所说的格式被称为立即调用函数表达式(IIFE)。它通常用于插件/库定义,使声明的函数成为窗口/文档的一部分或扩展现有对象(如jquery)。
$表示jQuery,_表示underscore.js,但它只是取决于您传递的参数。
每次触发事件deviceorientation时,都会执行您所指的函数。这在javascript中被称为回调或处理程序。
1)这是一个匿名函数,被调用并在中间执行。
(function(argumentList) {
// body
})(provideArguments);
2) $是由jQuery库声明的全局变量。
3) 如果使用jQuery,则可以直接影响查询的所有结果。图书馆将为你循环。例如,这段代码将选择所有锚标记,foreach标记将执行addClass方法,将类"myClassName"放入"query"的结果中。
$('a').addClass('myClassName');
(function(...) {...}) ();
这意味着代码将直接在页面中执行。
$
这是Jquery选择器。cf:http://api.jquery.com/category/selectors/
e
这是一个事件对象。cf:http://api.jquery.com/category/events/event-object/
- 用嵌套函数和默认函数定义函数
- 使用Extjs进行函数定义
- JS中奇怪的函数定义语法
- 重写javascript函数定义
- 使用角度图时,我可以用函数定义数据点颜色吗
- modal.js中的匿名函数定义
- 为从AJAX调用中utlizes DATA参数的函数定义回调
- Emacs:在 etag 中查找函数定义
- Javascript:对象函数定义
- 为什么要在函数定义之外引用静态变量(函数属性)
- Ember 对象函数定义中的计算属性.js
- javascript/jQuery中函数定义的区别
- CoffeeScript 承诺与函数定义链接
- 如何在使用 eval() 评估 JavaScript 时将回调函数定义作为参数传递
- Javascript - 为什么下面的函数定义错误
- 使用函数声明时的自定义函数(也称为惰性函数定义)
- JavaScript 函数定义不正确
- jQuery off on 时是用匿名函数定义的
- 停止 IntelliJ 11 在启用 JSLint 时向每个嵌套函数定义添加“use strict”
- 为什么不是't我为这个函数定义的javascript函数