Js模式问题

js pattern problems

本文关键字:问题 模式 Js      更新时间:2023-09-26

我对我正在阅读的javascript设计模式感到困惑:

var class = (function() {
  ...a bunch of code...
  return {
  .. some more code..
  ;
  // or, in some cases
  return function(constructorArgs) {
  };
})();

我的问题是:return语句在做什么?它为什么在那里?我很困惑,因为没有人愿意提及或谈论它。

我想你提到了两种不同的模式。

关闭匿名

第一种是使用匿名函数包装代码块以创建闭包:

var outer = (function() {
  var inner = "now you see me!";
  return inner + " now you don't"
})()

匿名函数为var定义的变量创建一个新的作用域。实际上,这允许您定义仅在该特定函数中可见的变量。

在上面的示例中,您可以访问函数内的inner,但它没有在函数外定义。

"类"

第二个是在JavaScript中定义"类"的常见模式:

var MyClass = (function() {
  function MyClass(arg) {
    this.arg = arg
  }
  return MyClass
})()

通过在闭包中定义构造函数,可以确保类被很好地包含。它还使您能够共享类范围内的状态或私有帮助器方法,而不会污染全局命名空间,或者将它们作为属性放置在类构造函数的原型上。

=符号右侧的代码为:(function(){})();它所做的是编译一个函数-有效地与以下相同:

function temp() {
}
class = temp();
但是,在示例中的函数内部,返回了另一个函数。这意味着class现在也是一个函数——由于vtortola引用的闭包效应,class函数可以引用所有在temp函数中声明的变量等。

这样做的想法是允许内部函数引用一些你不想在"全局"(或半全局)范围内挂着的状态-无论class方法在哪里调用,或者由谁调用,它都将始终访问该数据。

编辑:从代码中可以看出,在这种情况下,模式的目的是创建一个"类"类型的函数-所以你可以用下面的代码调用它:
var myInstance = new class();

虽然我有一种感觉,没有一个代码将工作,因为我有理由肯定,class是一个保留字…

这叫做闭包。

var myVar = (function (param1, param2){
    //do things
}('myParam1','myParam2')):

javascript引擎将立即执行括号之间的内容。

myVar的值将是函数function (param1, param2){ ... }返回的值。

这个函数将使用('myParam1','myParam2')作为参数。

你可以用两种不同的方式写闭包:

(function (receivedArgs){
  //do things
})(yourArguments);

(function (receivedArgs){
   //do things
}(yourArguments));

是闭包。函数返回一个内部函数,中间包含一些变量。

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures

欢呼。