私有与公共Javascript函数
有人能解释一下这两种功能的区别吗私有与公共Javascript函数,javascript,Javascript,有人能解释一下这两种功能的区别吗 (function(Engine, $, undefined) { //hidden from scope //public function below Engine.Init = function() { console.log("IM PUBLIC"); } //anonymous functions below function Login() { console.log("IM
(function(Engine, $, undefined) { //hidden from scope
//public function below
Engine.Init = function() {
console.log("IM PUBLIC");
}
//anonymous functions below
function Login() {
console.log("IM PRIVATE");
}
})( window.Engine = window.Engine || {}, jQuery );
具体地说,我想知道为什么
Engine.Init()
可以在控制台中使用,而Login
不可用。Init
是引用函数的Engine
对象的属性。
您可以像访问任何其他属性一样访问它
Login
是匿名“立即调用函数表达式”(IIFE)中的局部变量;与其他局部变量一样,其名称仅在声明函数中可见,因为参数的原因,引擎是全局的:
(window.Engine = window.Engine || {}, jQuery)
并且在全局命名空间中可用,如果您:
Engine.Login = function(){}
这将在全球范围内提供
函数登录仅在匿名自执行函数的作用域内可用 函数本身并没有什么区别。唯一的区别是,第一个函数分配给对象的属性(Engine.init
),该属性在全局范围(window.Engine
)中定义,而第二个函数是在本地范围内定义的
下面是一个等效但更简单的示例:
function foo() {
// 1
window.globalFunc = function() {
// global/public
}
// 2
function localFunc() {
// local/private
}
}
foo();
由于第一个函数显式分配给全局变量,因此在执行foo
后,可以在foo
之外访问该函数localFunc
未导出,因此是本地到foo
,即它无法访问并且不存在于foo
之外
function(Engine, $, undefined) {
...
}
这实际上是一个结束。因此,该函数中定义的所有内容仅在该范围内可用。当你这样做的时候
Engine.Init = ...
创建附着到引擎对象的特性。在您的例子中,引擎是一个全局对象,这意味着您可以通过控制台访问它。我想在这里问您一个问题,尽管它可能与这个问题无关:(function(){})和function(){}之间有什么区别?这与匿名函数或作用域有关吗?这只是一个语法修饰,以确保函数定义可以立即调用。请参阅“旁白:函数、参数和语法错误”下的内容。@lmjohns3:您为我指明了绝对正确的方向。谢谢你的链接。可爱的解释和更好的链接!干杯,伙计们!“因此,该函数中定义的所有内容仅在该范围内可用。”这与闭包无关,每个函数都是这样工作的。虽然从技术上讲,JS中的每个函数都是闭包,但这里的问题与闭包无关。。。JavaScript中的每个函数(和其他任何东西一样)都是一个对象。我们可以说对象的属性是公共变量。如果在函数中添加“var something=…”,则该对象是一个私有变量,仅适用于闭包的作用域。这不是真的吗?你可以这么说,但是函数是否是闭包并不重要。