首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >很难理解javaScript函数的定义

很难理解javaScript函数的定义
EN

Stack Overflow用户
提问于 2013-08-27 08:23:27
回答 4查看 108关注 0票数 0

http://jsfiddle.net/sidonaldson/ZuPYM/

代码语言:javascript
复制
(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')正在发生的事情进行递归。
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-27 08:26:54

1)为什么函数有(函数(.){.}()的格式;这里发生的事情我从未见过这样声明的函数。

这是一个所谓的IIFE(立即调用函数表达式),它基本上是一个未命名的函数,在编译器到达它的末尾时才被调用。

把它看作是一个简单的命名函数:

代码语言:javascript
复制
function myFunc() {...my code...}

然后在声明之后立即执行:

代码语言:javascript
复制
myFunc();

现在的生活:

代码语言:javascript
复制
(function() {...my code...})();
^--------------------------^^^
Parentheses to enclose the function, the last two are to invoke the function itself

2) $是否像其他语言中使用a__一样使用变量名?

是的,但在这种情况下,它只是返回id e的元素(通常是jQuery库,非常常见)。

3)这个函数是如何循环的,在C++中,您需要一段时间,或者需要对函数(‘e’)进行递归处理。

函数不循环,只执行一次。

编辑:正如@Rup所指出的,您可能是指每次触发事件时都会执行处理程序的原因。这是可能的,因为window.addEventListener函数向事件添加了一个处理程序(在本例中是deviceOrientation),每次触发事件时都会调用该事件。有关更多信息,请参考此页,MDN是获取JS信息的最佳场所。

票数 2
EN

Stack Overflow用户

发布于 2013-08-27 08:25:24

  1. 这是一个生平。基本上,这个函数将立即执行,而不被显式调用。一旦您对javascript更加满意,我强烈建议您阅读IIFE的链接(立即调用函数表达式)。
  2. $是用于jQuery的。它是一个用于HTML操作的javascript库。在javascript中,$和_和更多的非字母数字字符也经常用于定义变量。通常,$代表jQuery (但您也可以将它用于其他任何事情)。类似地,_代表underscore.js。
  3. 此函数不“继续循环”。这是个倾听者。它侦听DeviceOrientationEvent事件,并仅在设备方向更改时执行。

似乎您对javascript非常陌生。我建议您在跳入jQuery之前在JS上获得一些经验。

票数 2
EN

Stack Overflow用户

发布于 2013-08-27 08:28:38

1)这是一个匿名函数正在被调用和执行。

代码语言:javascript
复制
(function(argumentList) {
    // body
})(provideArguments);

$是由jQuery库声明的全局变量。

3)如果使用jQuery,可以直接影响查询的所有结果。图书馆会帮你转的。例如,这段代码将选择所有锚标记,而foreach标记将执行addClass方法,将类"myClassName“放到”查询“的结果中。

代码语言:javascript
复制
$('a').addClass('myClassName');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18460480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档