【问题标题】:what's wrong with my Self-Executing Anonymous Function in javascript [closed]我在javascript中的自动执行匿名函数有什么问题[关闭]
【发布时间】:2012-06-25 08:03:49
【问题描述】:

我尝试写一个javascript Self-Executing Anonymous Function

window.App = window.App || {}

    (function (global) {
        global.test = function () {
            console.log('test');
        }
    })(App);

$(function () {
    App.test();
})

但是火虫告诉我:({}) is not a function

然后我尝试将(app) 移入,例如:

(function (global) {
    global.test = function () {
        console.log('test');
    }
}(App));

那么萤火虫告诉我:

App is not defined

那么我的代码有什么问题?我怎样才能以正确的方式做到这一点?

这里是demo

【问题讨论】:

  • 这段代码对我来说有点奇怪,所以我不会提供答案,但第一行的大括号之间不应该有一些代码吗?
  • @JezenThomas 不,{} 只是创建空对象的一种方式。您可以看到它作为 global 传递到函数中,并在该函数上定义了一个方法 test
  • 这是一个很好的例子,可以解决在野外插入分号的问题。孩子们,永远不要忘记你的分号!
  • 非常有趣。好问题;不知道为什么它被否决了。 +1

标签: javascript function anonymous


【解决方案1】:

试试这个:

window.App = window.App || {};

你少了一个分号!

【讨论】:

  • JavaScript 会在每一行的末尾自动插入分号,如果这不会导致语法错误的话。这两行应该是等价的。
  • @cdhowie 并非总是如此,这是一个完美的案例和观点。
  • @cdhowie 不,这里需要分号,因为下一个标记是(
  • 你有它,semicolon saves the day
  • 荒谬!我认为 OP 故意构建这个问题来证明一个观点。
【解决方案2】:

在第一行添加分号

window.App = window.App || {};

JS 认为第 3 行的括号是第 1 行的新空对象的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    相关资源
    最近更新 更多