我有这个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;
是一个闭包吗?
答案 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
时动态动态。
最后你问为什么MyObject1
是obj1.myA;
对吗?这很简单,您根据对象构造的参数创建并使用以下属性进行对象,在本例中为1
:
(1, 2)
很清楚为什么{
myA: 1,
myB: 1,
hello: function()
}
的值为obj1.myA
。
1