闭包和这个有什么区别



我只是对javascript有了更多的了解,并在思考之间的区别

var myfunc = function(){
publicfunctions = {}
publicfunctions.function1 = function(){do smthing and return}
return publicfunctions 
}

var myfunc = function(){
this.function1 = function(){do smthing and return}
}

在我看来,两者都在做同样的事情

还有人能解释之间的区别吗

var func = (function myfunc(){ .. do smthing and return .. })(); 

var func = function myfunc(){ .. do smthing and return .. }
var newfunc = new myfunc()

感谢

让我们循序渐进。

  1. 示例:
    a(定义一个返回对象的函数(注意变量声明-您应该用var关键字声明它,以便将其范围限定到您的函数。这些对象有一个指向函数的属性。尽管如此,您的第一个函数还是分配给了变量myfunc

    现在,如果您尝试调用myfunc(),您将得到一个具有单个属性function1的对象。这里没有什么特别的。

    b(您再次定义一个函数并将其分配给myfunc变量,只是这次它包含this关键字,该关键字假设您正试图将此函数用作构造函数。在本例中,仅仅调用myfunc不会产生任何输出,因为您还没有从函数返回任何内容。但是,使用前面的关键字new调用函数将导致创建对象

var myObj = new myfunc(); 
// `this` keyword now refers to myObj which means myObj can call `function1`
  1. 示例:
    a(右边是一个称为IIFE(或立即调用函数表达式(的东西。基本意思是,一个函数表达式被创建并立即执行。因此func应该接收该函数返回的任何内容。

    b(再一次,面对构造函数,只有这次在执行myfunc之前添加new关键字时,才真正假设myfunc是构造函数。创建newfunc现在指向并拥有权限的对象

注意:在构造函数(使用new关键字调用的函数(中,this是隐式返回的,不需要显式返回。现在,如果你想测试它并返回其他东西,我会让你自己探索,看看你会得到什么。:(

由于这本身就是一个更广泛的话题,我推荐尼古拉斯·扎卡斯的这本优秀的书。它确实回答了很多JS问题。

最新更新