Почему закрытие javascript возвращает [Функция (анонимная)]? - PullRequest
0 голосов
/ 25 апреля 2020

Код от средний, понять замыкания

function Person(name) {
    var secret = 'secret!';
    this.name = name
    this.setName = function(newName) { this.name = newName }
    this.setNameToFoo = function() { this.name = foo }
    this.getSecret = function() { return secret }
 }

 var a = new Person('Max');

 console.log(a.name);
 a.setName('Oliver')
 console.log(a.name);

 var foo = 'Foo';
 a.setNameToFoo()
 console.log(a.name); 

 console.log(a.getSecret);

Вывод

Max
Oliver
Foo
[Function (anonymous)]

Все в порядке, кроме последнего. Кажется, что местных привязок не видно. Почему?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

В последней строке вы не вызываете функцию. Это должно быть console.log(a.getSecret());

function Person(name) {
    var secret = 'secret!';
    this.name = name
    this.setName = function(newName) { this.name = newName }
    this.setNameToFoo = function() { this.name = foo }
    this.getSecret = function() { return secret }
 }

 var a = new Person('Max');

 console.log(a.name);
 a.setName('Oliver')
 console.log(a.name);

 var foo = 'Foo';
 a.setNameToFoo()
 console.log(a.name); 

 console.log(a.getSecret());
0 голосов
/ 25 апреля 2020

Вы получаете эту ошибку, потому что вы отображаете саму функцию в console.log, а не ее возвращаемое значение.

Исправление: замените последнюю строку этой

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