2012-03-22 4 views
1

я это ....Является ли это закрытием javascript?

function MyFunction() { 
    var myVar = "I think I am encapsulated"; 

    this.getMyVar = function() { 
     return myVar; 
    } 
} 

var myProperty = new MyFunction(); 
console.log(myProperty.getMyVar()); 

myProperty.myVar = "you're not encapsulated"; 
console.log(myProperty.getMyVar()); 

Он выдает: «Я думаю, что я инкапсулированные дважды». Зачем? Я не думал, что это закрытие ...

+2

да, что это замыкание. –

ответ

6

Закрытие вокруг функции «getMyVar». Переменная «myVar» внутри конструктор является локальной переменной, а не видна вне функции, кроме как возвращаемое значение из «getMyVar».

Установка свойства «myVar» на объекте делает именно это, но функция «getMyVar» не возвращает свойство объекта; он возвращает значение локальной переменной в закрытии.

2

Да, это так.

Когда вы определяете функцию внутри другой функции, внутренняя функция имеет доступ к все локальных переменных внешней функции в ...

В вашем случае, getMyVar имеет доступ к myVar - через закрытие.

2
var myVar = "I think I am encapsulated"; 

this.getMyVar = function() { 
    return myVar; 
} 

Это замыкание, и myVar переменной от времени функция была создана будет возвращен. Обратите внимание, что это локальная переменная, поэтому нет другого способа получить к ней доступ после выхода этой функции.

var myVar = "I think I am encapsulated"; 

Обратите внимание, что это не this.myVar (вы устанавливаете позже myProperty.myVar переменной).

Возможно, что вы пытаетесь сделать, это:

function MyFunction() { 
    this.myVar = "I think I am encapsulated"; 

    this.getMyVar = function() { 
     return this.myVar; 
    } 
} 
Смежные вопросы