javascript中用括号括起来的函数

javascript中用括号括起来的函数,javascript,iife,Javascript,Iife,我对javascript还不熟悉,我可能会先深入到最深处。在阅读js中的设计模式时,我遇到了以下定义。我不理解这里使用的语法,为什么“()”中的“log”函数定义 请给我指一下正确的方向 如果没有括号,赋值的右侧是一个函数表达式,而log被指定一个对该(匿名)函数表达式的引用,允许以后调用log() 如果包含括号,则包装的函数将变成一个自调用函数表达式(并立即执行),因此无论此函数调用返回什么,都会为log赋值 正如其他人所说,您的代码显示了所谓的模块模式的示例。阅读更多关于它的信息 我不明白这

我对javascript还不熟悉,我可能会先深入到最深处。在阅读js中的设计模式时,我遇到了以下定义。我不理解这里使用的语法,为什么“()”中的“log”函数定义


请给我指一下正确的方向

如果没有括号,赋值的右侧是一个函数表达式,而log被指定一个对该(匿名)函数表达式的引用,允许以后调用
log()

如果包含括号,则包装的函数将变成一个自调用函数表达式(并立即执行),因此无论此函数调用返回什么,都会为
log
赋值

正如其他人所说,您的代码显示了所谓的模块模式的示例。阅读更多关于它的信息

我不明白这里使用的语法,为什么是“log”函数 “()”中的定义

它基本上是自动执行的匿名函数。有几种编写此类函数的方法

(函数(){
警惕(“你好”);
})();
! 函数(){
警惕(“你好”);
}();
+函数(){
警报(“加”);
}();
-函数(){
警报(‘减’);

}();
log
不是一个函数,它最终作为一个模块导出两个函数(
log.add
log.show
)。如果不关心返回值,可以使用
保存字符!function(){/*code*/}()
部分重复,但这也涉及模块模式,它不是其他问题/答案的一部分。@royhowie:模块模式是关于返回值:)挑剔:在
log=function(…){…}
中,右侧已经是一个表达式-一个函数表达式。不是括号把它变成了一个。谢谢你的提示,我试着相应地更正我的答案。关于函数声明与表达式的更多信息:
(函数(…){…})(…)
被认为是标准的<代码>
被一些人用作保存几个字符的黑客;但是
+
-
是不好的做法(
如果(true)返回1+函数(){return 2}()
返回意外的结果-
3
而不是其他方法将返回的
1
)。
var log = (function() {
    var log = "";
    return {
        add: function(msg) { log += msg + "\n"; },
        show: function() { alert(log); log = ""; }
    }
})();