模块模式的匿名闭包

时间:2015-09-18 16:01:41

标签: javascript

在每篇关于模块模式的文章中,我都会看到以下列方式定义模块:

Private Function qdefSQL() As Boolean
    Dim db As Database
    Dim qdef As QueryDef
    Dim sSQL As String
    Dim iqdef As Integer

    Set db = CurrentDb
    For iqdef = 0 To db.QueryDefs.count - 1
        Set qdef = db.QueryDefs(iqdef)
        sSQL = qdef.SQL
        If InStr(sSQL, "target") > 0 Then
            Debug.Print qdef.Name
        End If
    Next

    qdefSQL = True
End Function

这与:和

有什么区别
var foobar = (function() {
   // code
})();

?两者似乎都以同样的方式运作。

2 个答案:

答案 0 :(得分:3)

在第一种情况下,foobar返回匿名函数调用的结果,而在第二种情况下,foobar IS 返回匿名函数。

这一切都意味着它们根本不是同一个东西,并且不会以同样的方式工作。

答案 1 :(得分:3)

他们似乎不应该以同样的方式工作。

一个定义一个函数并调用它,一个定义一个函数。

在第一种情况下,foobar被设置为函数返回的任何内容。

在第二个中,foobar 函数。