какая разница между замыканиями и этим - PullRequest
0 голосов
/ 30 апреля 2020

Я просто углубляюсь в 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 Ответ

0 голосов
/ 30 апреля 2020

Давайте go шаг за шагом.

  1. пример: а) вы определяете функцию, которая возвращает объект (осторожно с объявлением переменной - вы должны объявить его с ключевым словом var, чтобы охватить его для вашей функции. Этот объект имеет единственное свойство, которое указывает на функцию. Тем не менее, Ваша первая функция назначена переменной myfunc Теперь, если вы попытаетесь вызвать myfunc(), вы получите объект с единственным свойством function1. Здесь нет ничего особенного. б) вы снова определяете функцию и присваиваете ее переменной myfunc, только на этот раз она содержит ключевое слово this, которое предполагает, что вы пытаетесь использовать эту функцию в качестве конструктора . В этом примере простой вызов myfunc не приводит к выводу, поскольку вы ничего не возвращали из функции. Однако вызов функции с предшествующим ключевым словом new приведет к созданию объекта.
var myObj = new myfunc(); 
// `this` keyword now refers to myObj which means myObj can call `function1`
пример: а) На правой стороне находится то, что называется IIFE (или выражение немедленного вызова функции). По сути, это выражение функции, которое создается и выполняется, ну, немедленно. Так что func должен получать все, что возвращает эта функция. б) И снова, обращаясь к конструктору, только на этот раз вы фактически предполагали, что myfunc является конструктором, когда вы добавили ключевое слово new перед выполнением myfunc. Создает объект, на который c newfunc теперь указывает и имеет власть над ним.

Примечание: В функциях конструктора (те, которые вы вызываете с ключевым словом new) ), this неявно возвращается и не требует явного возврата. Теперь, если вы хотите проверить это и вернуть что-то еще, я оставлю это на ваше усмотрение, чтобы изучить и посмотреть, чем вы закончите. :)

Поскольку это более широкое топи c само по себе, я рекомендую эту превосходную книгу Николаса Закаса. Он действительно отвечает на множество JS вопросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...