对这个javascript模式感到困惑吗

对这个javascript模式感到困惑吗,javascript,Javascript,遇到以下代码行,但无法理解 这是什么(/…/)(这);javascript的用途?这个图案有名字吗 代码如下: //Move.js (function(exports){ exports.Move = function(){ }; })(this); 该模式只是在执行时将导出分配给此 假设全局范围和浏览器,此将指向窗口对象 考虑到这些假设,window.Move应该包含在该IIFE中分配的函数(立即调用的函数表达式) 如果此函数是在另一个上下文中调用的,其中this不是窗口,则它会将

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

这是什么(/…/)(这);javascript的用途?这个图案有名字吗

代码如下:

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

  };
})(this);

该模式只是在执行时将
导出
分配给

假设全局范围和浏览器,
将指向
窗口
对象

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

如果此函数是在另一个上下文中调用的,其中
this
不是
窗口
,则它会将该方法分配给外部环境中的
this

此模式是一个“”。简而言之,它只是一个立即执行的函数。末尾的
是发送到内部函数的参数,该函数将作为
导出

(function(exports){

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

}(this));
在您的示例中,我们可以假设无论此是什么,它都是添加了一个
Move
方法的某个对象

有些人还将此模式称为“”,从某种意义上说,它创建了一个“包含的环境”,因此由于新的函数作用域,它内部的内容对用户不可见。换句话说,无论什么东西在里面都能看到外面,但是外面只能看到里面让它看到的东西。这种模式被称为“模块模式”。有各种各样的子模式,这一个使用了扩充模块模式

首先,我们导入模块,然后添加属性,然后导出 信息技术下面是一个示例,从上面扩展我们的模块:

有关此模块模式的更多信息,请查看

有关常规Javascript模式的更多阅读,请查看

这在javascript中不是指类或对象,而是指上下文。无论如何都可以调用任何javascript函数,您可以动态更改此函数的值。在该示例中,它只是创建一个函数,立即调用它并将其值赋给export参数。简而言之,这是函数定义,然后函数调用,并以此作为参数。@加缪,这是一个非常令人困惑的解释。函数的这个值不是真正动态的,它是由函数的调用方式设置的,以后不能更改。如果你读得好的话,我谈到了动态函数的上下文。这确实是动态的,因为它没有设置为一个值,而是取决于函数的调用方式。解释很清楚。它不引用一个上下文,因此它是动态的。最好说在全局代码中,它总是引用全局对象。在某些环境(例如浏览器)中,还有一个窗口对象,它本质上是同一个对象(但可能不是),因此在全局上下文中也会引用窗口。这不是模块模式的示例,它只是一个立即调用的函数表达式(IIFE),与模块模式一起使用,以返回一个对象,该对象具有属性、方法以及通过闭包访问“私有”成员的权限。我没有说我上面的代码就是模块模式的一个示例。我上面的代码只是在函数中显示
这个
变成
导出
。我没有包括一个模块模式的例子,因为每个人都有他/她自己的构建风格。上面的代码与var exports=function(){//bla}有什么不同。使用
var exports
创建一个局部变量
exports
,它不会引用您传递的
exports
(即
外部)。是一本非常好的,详细的,并且有无数的例子,绝对是必读的!