难以理解javaScript函数的定义

Having trouble understanding this definition of javaScript function

本文关键字:函数 定义 javaScript      更新时间:2023-09-26

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";
  }
})();
  1. 为什么函数的格式是(function(...) {...}) ();这里发生的事情我从来没有见过这样声明的函数
  2. $是否使用与其他语言中的_类似的变量名
  3. 这个函数是如何保持循环的,在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)。

  1. 这是IIFE。基本上,此函数将立即执行,而无需显式调用。一旦您对javascript更加熟悉,我强烈建议您阅读IIFE(立即调用函数表达式)的链接

  2. $用于jQuery。它是一个用于HTML操作的javascript库。在javascript中,$和_以及更多非字母数字字符也经常用于定义变量。一般来说,$代表jQuery(但您也可以将其用于其他任何用途)。类似地,_代表undercore.js.

  3. 此函数不"保持循环"。它是一个倾听者。它侦听DeviceOrientationEvent事件,并且仅在设备方向发生变化时执行。

您似乎对javascript非常陌生。我建议您在深入jQuery

之前先获得一些JS方面的经验
  1. 您所说的格式被称为立即调用函数表达式(IIFE)。它通常用于插件/库定义,使声明的函数成为窗口/文档的一部分或扩展现有对象(如jquery)。

  2. $表示jQuery,_表示underscore.js,但它只是取决于您传递的参数。

  3. 每次触发事件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/