无法理解javaScript函数的这个定义

时间:2013-08-27 08:23:27

标签: javascript

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 ++中你需要一段时间或者用于或递归function('e')发生的事情。

5 个答案:

答案 0 :(得分:2)

  1. 这是IIFE。基本上,此函数将立即执行,而不会被显式调用。一旦你对javascript更加满意,我强烈建议你阅读IIFE(立即调用函数表达式)的链接

  2. $代表jQuery。它是一个用于HTML操作的javascript库。在javascript中,$和_以及更多非字母数字字符也经常用于定义变量。通常,$代表jQuery(但你也可以将它用于其他任何东西)。同样,_代表underscore.js。

  3. 此功能不会“继续循环”。这是一个倾听者。它会侦听DeviceOrientationEvent事件,并仅在设备方向更改时执行。

  4. 看来你对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)

  1. 您正在谈论的格式称为立即调用的函数表达式(IIFE)。它通常用在插件/库定义中,以使声明的函数成为窗口/文档的一部分或扩展现有的对象,如jquery。

  2. $代表jQuery,_代表underscore.js,但它只取决于你传递的是什么参数。

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