(function(parameterOne, parameterTwo) {
没有意义,因为您最终没有传递这些参数。此外,看起来您正在立即尝试创建匿名代码块 - 在某些情况下是有意义的,但您不需要这样做,除非您试图保护全局范围免受此代码块内发生的任何事情的影响。
functionOne = function(...) {
...
},
这是一个命名函数,类似于var functionOne
仅在父函数或构造函数内部有用。
functionTwo: new function() {
},
更新:当您尝试在这里创建实例时,这真的没有意义。您绝对可以立即实例化您在该函数声明中拥有的内容(这与先声明 func. 然后使用 operator 相同new
),但在这种情况下,您得到的是对象而不是函数。尝试:
var f = function() {};
console.log(f); // "function"
var f = new function() {}
console.log(f); // "objest"
该对象是您的构造函数的实例。
this.functionThree = function(...) {
}
这是一个类的方法。使用 operator 实例化类new
后,您可以从实例外部访问它。此外,当您this.
在类中使用时,请记住,每次实例化一个类时,它都会为该值保留内存。当这些实例的变量不同时,没关系,但如果它是一个方法,你最好将它添加到构造函数原型中,这样它只声明一次并且不会为它保留新的内存块。
})()
在这里,您通常会在内部传递您请求的参数,例如parameterOne, parameterTwo
(function(parameter) {
functionFour = function(..) {
},
....
})(document)
这是一种将上下文或任何对象传递给此匿名代码块的方法。在这种情况下,它看起来像一个接受 window.document 的插件,但它也可以接受 DOM 的任何其他部分。例如,如果您想选择所有标签a
并document
作为参数接收,它将遍历 window.document 中的所有链接,但如果您通过$('#somediv')
,此插件将仅遍历具有此 ID 的 div 内的链接。
(function($) {
$.fn.myCustomPlugin: function(...) {
}
})(jQuery)
这是确保 $ 内的代码是一个 jQuery 对象的好方法。问题是,例如在 Chrome 中已经有一个原生函数$
,或者在某些生产站点$
中可能是一个 Prototype JS 函数。但是在里面的例子中,你要确保 var$
不是原生的$
或者不是 Prototype。
In general, you should not use (function() {...})()
liberally -- this is only used in specific cases when you're protecting global environment as I mentioned above.