0

我是 JS 新手,研究了一些来自网络应用程序的代码。谁能告诉我这两个声明之间的区别,它们都是具有特色功能的对象吗?什么时候使用哪个声明?

a) 自我唤起功能:

    namespace.myCanvas= (function(){

      var canvas = document.getElementById('canvas');        
      var ctx = canvas.getContext('2d');
      var foo = function(...){...}

      return {
        canvas: canvas,
        context: context,
        foo: foo
      }
    })();

b)一个可以提供有关对象信息的函数,我猜:

function makeRectangle(xPos, yPos, w, h) {
  this.xPos= xPos;
  this.yPos= yPos;
  this.w= w;
  this.h= h;

  this.make= function() {

   ctx.fillStyle = this.fill;
   ctx.fillRect(this.xPos, this.yPos, this.w, this.h);
  }
}
4

1 回答 1

2

当你做这样的事情时:

(function(){ 
return {}
})();

您正在创建一个自调用函数,它基本上是一个通过 () 创建并执行的函数。好的,所以您的 A 函数是自调用的并返回一个包含其他一些对象的对象。所以你的变量 namespace.myCanvas 将是函数返回的对象。

并且您的 B 函数是一个Javascript Constructor,(当与 new 关键字一起使用时)将返回一个具有xPosyPoswh属性和一个make方法的对象。

希望能帮助到你

编辑 此链接可以帮助您..如果您对函数声明和函数表达式差异有疑问

于 2013-04-05T20:34:10.753 回答