2017-02-18 5 views
0

Я не могу понять, что не так в следующем коде и почему он будет работать, когда я сделаю это, используя второй способ. Может ли кто-нибудь помочь мне понять это?Попытка закрыть неправильный путь?

Я это следующий код JavaScript:

var clsFunc = function(prefix) { 
    var id = 0; 
    return function() { 
    id = id + 1; 
    console.log(prefix + id); 
    } 
} 

Первый способ (не работает):

Если я пытаюсь вызвать эту функцию как этот ничего не происходит

clsFunc('div') 

Второй способ (рабочий)

var getId = {'div': clsFunc('div')} 

getId.div() 

Результат:

div1 
undefined 
getId.div() 

Результат:

div2 
+0

По крайней мере, связанный: http://stackoverflow.com/questions/111102/how-do-javascript-closures-work –

+0

В основном это разница между 'clsFunc ('div')' и 'clsFunc ('div') () ' – Bergi

ответ

2

clsFuncфункция создает функцию и возвращает ее. Так что делать

clsFunc('div'); 

... это бессмысленно, потому что она создает функцию, а затем просто выбрасывает его, потому что вы не храните его в любом месте.

Второй способ хранит функцию, созданную в свойстве объекта. Эта функция ссылается на контекст, который ее создал (вызов clsFunc), хотя этот вызов вернулся, который содержит переменную id. Когда вы вызываете функцию (getId.div()), она добавляет от 1 до id, а затем выводит префикс ("div"), за которым следует новое значение, если id (1, затем 2, затем 3 и т. Д.).

Вам не нужен объект для второго пути, вы могли бы просто использовать переменную:

var clsFunc = function(prefix) { 
 
    var id = 0; 
 
    return function() { 
 
    id = id + 1; 
 
    console.log(prefix + id); 
 
    } 
 
}; 
 

 
var f = clsFunc('div'); 
 
f(); // "div1" 
 
f(); // "div2"


(The undefined s вы видите только потому, что вы запускаете это в консоли JavaScript, которая показывает вам результат вызова функции, поскольку функция ничего не возвращает, результатом ее вызова является undefined.)

+0

Downvoter: В чем проблема? Как это «не полезно»? –

+0

Большое спасибо за эту быструю помощь. Ценю вашу помощь. –

+0

Я предполагаю месть DV от парня, который удалил их ответ в одно и то же время. – JJJ