对这个javascript模式感到困惑

时间:2012-04-05 05:44:24

标签: javascript

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

这是什么(/.../)(this);用于javascript的目的?它有这种模式的名称吗?

代码如下:

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

  };
})(this);

3 个答案:

答案 0 :(得分:5)

此模式为“Immediately Invoked Function Expresssion”。简而言之,它只是一个立即执行的功能。最后的this是要发送到内部函数的参数,将作为exports

进行访问
(function(exports){

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

}(this));

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

有些人也称这种模式为“Module Pattern”,因为它创建了一个“包含的环境”,因此由于新的函数范围,其内部的东西是不可见的。换句话说,无论内在的东西看到外面,但外面只能看到内部让它看到的东西

答案 1 :(得分:3)

该模式只会在执行时将exports分配给this

假设全局范围和浏览器,this将指向window对象。

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

如果在this window的其他上下文中调用此函数,它会将该方法分配给外部环境中的this

答案 2 :(得分:1)

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

  

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

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

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