【问题标题】:how does this js function work? Title too small to explain [duplicate]这个js函数是如何工作的?标题太小无法解释[重复]
【发布时间】:2010-10-14 12:21:02
【问题描述】:

我一直在研究 jquery 以了解它是如何工作的,并且我发现它使用了我以前在 JS 中从未见过的构造。以下代码似乎在浏览器加载时执行,它几乎就像一个调用自身的函数。我已经搜索了有关此功能的文档,但不确定它的名称。有人可以告诉我原理,以便我可以谷歌了解更多信息吗?

(function test() {
    alert('test');
})();

【问题讨论】:

标签: javascript jquery


【解决方案1】:

这正是它的本质,一个自调用匿名函数,该范围内的变量:

(function test() {
  //here
})();

除非你暴露它们,否则它们不会在外面可见。如果您想了解更多关于使用和实际示例的详细信息,我会从 this question 开始。

【讨论】:

  • 谢谢.. 这常见吗?无论如何要告诉它何时实际被调用? (即:当浏览器读取、编译脚本或页面完成加载时?)
  • @Billworth - 是的,它非常很常见。它在代码中的确切位置被调用,它不是 jQuery 使用的 document.ready 处理程序,这是一种不同的格式,例如 $(function() { })$(document).ready(function() { });jQuery(function($) { });
  • 确实,这些通常被称为“自调用”或“自执行”,但它们并没有真正自调用。像“立即调用和丢弃的匿名函数”这样的东西会更准确,但我认为它不会流行:-)
  • @Pointy 我认为它最终会。 benalman.com/news/2010/11/…
【解决方案2】:

它是一个自执行函数。

这是一个立即调用的函数表达式。

它用于创建本地范围。如果您有一个需要大量新变量的代码-sn-p,并且您只需要运行该代码一次,那么用这个函数封装 sn-p 是一个好主意(以便变量形成 sn- p 不要污染全局命名空间)。

(function() {
    // all variables and functions declared here are not visible
    // outside of this function
})();

但是,在您的代码中,该函数不是匿名的 - 您将其称为“测试”,因此它是一个命名函数表达式。最好不要为函数表达式定义名称(因为 Internet Explorer 中存在与此问题相关的错误: http://github.com/kangax/nfe

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多