1) получает ли f1 и f2 разные клоны c (p)
Это правильно. Каждый вызов o.f()
создает совершенно новый function c(p)
. Это очень легко показать, я немного изменю ваш код:
const o = {
f (v){
function c(p){
console.log(p)
}
return c
}
}
f1 = o.f()
f2 = o.f()
console.log(f1 === f2);
Итак, мы ясно видим, что f1
и f2
различны, поэтому возвращаемая функция не совпадает. Просто для ясности, объекты в JavaScript равны, только если они являются тем же объектом, а не просто похожи по форме и содержанию. И функции также являются объектами, таким образом:
const a = function f() {
return 2 + 2;
};
const b = function f() {
return 2 + 2;
};
const c = a;
console.log("a === b", a === b); //false
console.log("b === c", b === c); //false
console.log("a === c", a === c); //true
2) или f1 и f2 указывают на то же пространство памяти, что и c (p)
Ну, определенно нет. Я показал это выше - функции разные.
3) также является ли приведенный выше код сценарием закрытия?
Э, да, но ... это действительно не имеет значения Закрытие создается каждый раз, когда создается функция . Итак, есть один для o.f()
, а затем один создается с c()
каждый раз, когда вызывается o.f()
.