(function(){ ... })();
我看过this发布并对此有所了解。但几乎没有更多疑问,主要是关于它的使用方式。
就像一个静态 block !
因为它像一个静态 block ( self 调用!),它可以用于初始化(就像一些虚构的常量)?
但是没有可用的 getter
从它获取任何东西并在别处使用它!
返回,必须吗?
上面的解决方案是在那个函数中有一个return
?这样我就可以获取它返回的任何内容并使用它。
引用全局对象?!
(function(window, undefined){})(this);
上面代码的解释在引用的post的第二个答案中,我无法理解,如果有人能解释得更多(或对我来说更简单),那就太好了
更新:看看这段代码↓
var myElement=document.getElemetById("myElementId");
(function(myElement){
/**'this' here is 'myelement'???**/
};
})(this);
最佳答案
一个常见的方法如下(称为命名空间)——它通过立即执行您的函数并将您需要的基本部分返回到您的变量中来创建一个封装的范围:
var yourNamespace = (function(window, undefined){
/* private code:*/
var privateVar = "foobar",
count = 0;
/* the stuff you want to use outside: */
return{
val: 5,
publicVar:privateVar,
func:function(){return ++count}
}
})(this);// `this` is a reference to `window` here
这样您就可以通过您的 yourNamespace
变量访问您需要的一切,同时仍然保持隐私并且不会污染全局对象。它称为命名空间并使用闭包范例。您还可以移交函数以使用私有(private)(对于封闭范围不可见)变量。
移交 undefined 的一个原因是,在 ES3 中 undefined 是可写的,而在 ES5 中不再是这种情况。通过在范围内创建对全局 window
对象的直接引用,将 this
作为参数移交可缩短查找时间。但是,要非常小心 - 在 ES5 严格模式下 this
不再是窗口,而是解析为 undefined
!所以不建议再这样做了!
移交 window 和 undefined 的另一个原因是,现在这些是变量名,缩小器可以将它们压缩为单个字母。
if(myVar == undefined)
// could be compressed to:
if(a==x)
编辑您的问题:
this
在您的示例中不会改变,您需要以下解决方案之一:
(function(myElement){/*your code*/})( document.getElemetById("myElementId") );
// or:
(function(){
var myElement = document.getElemetById("myElementId");
/* your code */
})();
关于javascript - 自调用匿名函数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18203897/