为什么这个JavaScript函数产生这个输出?

时间:2018-05-23 16:47:08

标签: javascript

我有这个JavaScript代码:

O(n^2)

...而O(n ^ 2)会导致var MyObject1 = function (a, b) { return { myA : a, myB : b, hello : function () { return "Hello !"; } } ; } ; 设置为obj1 = MyObject1(1, 2),但我不明白为什么会产生此值。

另外,为什么obj1仍为值{myA: 1, myB: 2, hello: ƒ}?是因为obj1.myA;是一个闭包吗?

2 个答案:

答案 0 :(得分:1)

  

我写

obj1 = MyObject1(1, 2) // {"myA" :1,"myB" :2}
  

有人可以解释我为什么吗?

原因MyObject是一个返回对象的函数,因此如果你调用它,它会返回一个对象:)

  

我写的时候:

 obj1.myA; 
  

为什么答案仍然是1,这是因为你好是一个闭包?

因为您创建了一个新对象,并且该对象的属性myA在构造期间设置为1。然后,您将该新对象分配给全局变量obj1,以便随时访问它。只有当你在另一个函数中有一个函数时才会涉及闭包,例如你可以这样做:

 var MyObject1 = function (a, b) {
  return {
     myA : a,
     myB : b,
    hello : function () { return a; }
   } ;
 } ;

然后在a内关闭了hello,所以你可以这样做:

MyObject1(1,2).hello() // 1

答案 1 :(得分:0)

基本上让我们检查所有代码:

var MyObject1 = function (a, b) {}

这是function分配,您可以将其重新定义为

function MyObject1(a,b){}

让我们继续使用函数的return语句

return { ... }

这里你要返回一个Object,这样你就可以通过函数的返回来分配你所分配的变量。

let obj1 = MyObject1(1, 2)

在这里,我们可以看到您将return的{​​{1}}分配给MyObject1(1,2)变量,而obj1是您构建的return每次调用object时动态动态。

最后你问为什么MyObject1obj1.myA;对吗?这很简单,您根据对象构造的参数创建并使用以下属性进行对象,在本例中为1

(1, 2)

很清楚为什么{ myA: 1, myB: 1, hello: function() } 的值为obj1.myA

1