8

遇到以下代码行,但无法理解。

这是什么 (/ ... /)(this); javascript中的用途?这个模式有名字吗?

代码如下:

//Move.js
(function(exports){
  exports.Move = function(){

  };
})(this);
4

3 回答 3

5

此模式是“立即调用函数表达式”。简而言之,它只是一个立即执行的函数。最后this是一个要发送到内部函数的参数,该函数将被访问为exports

(function(exports){

    //that was "this" outside, is now "exports" in here

}(this));

在您的示例中,我们可以假设无论this是什么,它都是一些已添加Move方法的对象。

有些人还将这种模式称为“模块模式”,因为它创建了一个“包含的环境”,因此由于新的功能范围,其中的东西对它不可见。换句话说,里面的东西都能看到外面,但外面只能看到里面让它看到的东西

于 2012-04-05T05:48:11.297 回答
3

该模式只是在执行时exports分配给。this

假设全局作用域和浏览器一样,this都会指向该window对象。

考虑到这些假设,window.Move应该包含在该 IIFE(立即调用函数表达式)内部分配的函数。

如果在thisis not window的不同上下文中调用此函数,它将将该方法分配给this外部环境中的任何内容。

于 2012-04-05T05:46:14.517 回答
1

这种模式称为“模块模式”。有各种子模式,这个使用了增强模块模式。

首先,我们导入模块,然后添加属性,然后导出它。这是一个示例,从上面扩充我们的 MODULE:

有关此模块模式的更多信息,请查看http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

有关一般 Javascript 模式的更多信息,请查看 http://addyosmani.com/resources/essentialjsdesignpatterns/book/

于 2012-04-05T05:55:36.183 回答