javascript - 自调用匿名函数表达式

标签 javascript

(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/

相关文章:

javascript - 更改输入 :focus 上的提交按钮不透明度

javascript - AJAX 调用 - 如果用户在调用完成之前离开页面会怎样?

javascript - Webpack 4 拆分块术语

javascript - 第二次调用时 tween.addEventListener 不是函数

javascript - 仅打印隐藏对象标签的内容

javascript - 检查页面是否使用 JavaScript 中的 asp.net ajax

javascript - 使用 JavaScript 更改嵌套 HTML 元素的字体颜色

javascript - 将多个参数传递给 React 中的函数

javascript - 如何在 react-native 中跟踪新的应用程序构建?

javascript - 使用 Paperclip 使用 Dropzone.js 上传 Rails 4 文件