javascript 中立即调用的函数
Immediately Invoked functions in javascript
我在 javascript 中对使用 IIF 进行了澄清。
我已经下载了一个名为 test.js 的 javascript 文件,如下所示,在谷歌搜索 IIF 后我遇到了以下问题:
define(function () {
(function (window) {
this.test = function() {};
Test.prototype.function1 = function(){
//Do something
},
function Delete(){
//Code to Delete
}
window.Delete = Delete;
})(window);
});
我有以下问题:
是行,
this.test = function() {};
构造函数?
如果可以的话,我可以在一个文件中有 2 个构造函数,例如:
this.test = function() {};
this.test2 = function() {};
而且,当我知道这是一个自动调用的文件时,为什么我需要一个构造函数,其中所有内容最初都是自己执行的。
这是私有函数吗?
Test.prototype.function1 = function(){
//Do something
},
这不是自动获取的吗?我是否需要创建一个测试对象然后调用它?
这是一个public函数吗?
function Delete(){
//Code to Delete
}
window.Delete = Delete;
上面最后一行说的是。如果是这样,那么第一个和第二个函数有什么区别?
这里的关键词window
是什么?
值得注意的是,此代码将失败并出现错误,因为 Test
未定义,并且您无法在 undefined
上设置 prototype
属性。
- 在JavaScript中,任何函数都可以是构造函数。这取决于你如何使用它。您可以将函数和属性添加到任何函数的
.prototype
属性 中,并且使用 new
从它创建的任何对象都将从原型链中获取它们。在您的情况下,this.test = function(){}
看起来不像原型。
- 在 JavaScript 中没有 "public" 或 "private" 函数这样的东西,只有通过
return
从函数中暴露出来的东西(或者在你的情况下,通过使用全局 window
对象,这被认为是不好的做法)如果 Test
函数暴露在某处,那么 Test.prototype.function1
也会暴露。所有原型方法都是"public".
- 是的,有点。正如我所说,"public" 或 "private" 与 JavaScript 无关。您创建了一个函数并将其放在全局的
window
对象上。本质上,您已将函数设为全局。
window
是全局浏览器对象。虽然当像这样使用 (function(window) { ... })(window)
时,第一个 window 是参数的名称,(以及函数引用该参数的任何 window
实例,第二个(传递给函数调用)是全局 window
对象。
延伸阅读:
我在 javascript 中对使用 IIF 进行了澄清。 我已经下载了一个名为 test.js 的 javascript 文件,如下所示,在谷歌搜索 IIF 后我遇到了以下问题:
define(function () {
(function (window) {
this.test = function() {};
Test.prototype.function1 = function(){
//Do something
},
function Delete(){
//Code to Delete
}
window.Delete = Delete;
})(window);
});
我有以下问题:
是行,
this.test = function() {};
构造函数? 如果可以的话,我可以在一个文件中有 2 个构造函数,例如:this.test = function() {}; this.test2 = function() {};
而且,当我知道这是一个自动调用的文件时,为什么我需要一个构造函数,其中所有内容最初都是自己执行的。
这是私有函数吗?
Test.prototype.function1 = function(){ //Do something },
这不是自动获取的吗?我是否需要创建一个测试对象然后调用它?
这是一个public函数吗?
function Delete(){ //Code to Delete } window.Delete = Delete;
上面最后一行说的是。如果是这样,那么第一个和第二个函数有什么区别?
这里的关键词
window
是什么?
值得注意的是,此代码将失败并出现错误,因为 Test
未定义,并且您无法在 undefined
上设置 prototype
属性。
- 在JavaScript中,任何函数都可以是构造函数。这取决于你如何使用它。您可以将函数和属性添加到任何函数的
.prototype
属性 中,并且使用new
从它创建的任何对象都将从原型链中获取它们。在您的情况下,this.test = function(){}
看起来不像原型。 - 在 JavaScript 中没有 "public" 或 "private" 函数这样的东西,只有通过
return
从函数中暴露出来的东西(或者在你的情况下,通过使用全局window
对象,这被认为是不好的做法)如果Test
函数暴露在某处,那么Test.prototype.function1
也会暴露。所有原型方法都是"public". - 是的,有点。正如我所说,"public" 或 "private" 与 JavaScript 无关。您创建了一个函数并将其放在全局的
window
对象上。本质上,您已将函数设为全局。 window
是全局浏览器对象。虽然当像这样使用(function(window) { ... })(window)
时,第一个 window 是参数的名称,(以及函数引用该参数的任何window
实例,第二个(传递给函数调用)是全局window
对象。
延伸阅读: