Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.09.2013, 16:35
Новичок на форуме
Отправить личное сообщение для lllypyn Посмотреть профиль Найти все сообщения от lllypyn
 
Регистрация: 03.09.2013
Сообщений: 3

Замыкания как получить доступ к переменным
Почитал статьи на хабре по замыканиям. Все вопросы в коде.
var name = new Array(''Viktor', 'Daniil', 'Danislav''Osip', 'Ostap');
var family = new Array('Smirnov', 'Ivanov', 'Kuznecov', 'Popov', 'Sokolov');
var email = new Array('@gmail.com', '@tut.by', '@mail.ru', '@hotmail.com');
function getRegistr(){
var name, family, email;
 var rnd = function(){
 name = Math.floor(Math.random()*/*как получить доступ к массиву name?*/.length);
 family = Math.floor(Math.random()*/*как получить доступ к массиву family?*/.length);
 email = Math.floor(Math.random()*/*как получить доступ к массиву email?*/.length);
 };
 return {"name": name,"family": family,"email": email};
};
var t = getRegistr();
alert(name[t.name]);// пишет undefined

Последний раз редактировалось lllypyn, 03.09.2013 в 16:43.
Ответить с цитированием
  #2 (permalink)  
Старый 03.09.2013, 16:43
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

lllypyn,

доступ есть просто по имени, но строчка var name, family, email; перекрывает внешние переменные, заменяя их на внутренние.
Ответить с цитированием
  #3 (permalink)  
Старый 03.09.2013, 16:49
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от lllypyn
new Array(''Viktor', 'Daniil', 'Danislav''Osip', 'Ostap');
странный массив
var name = new Array('Viktor', 'Daniil', 'Danislav','Osip', 'Ostap');
var family = new Array('Smirnov', 'Ivanov', 'Kuznecov', 'Popov', 'Sokolov');
var email = new Array('@gmail.com', '@tut.by', '@mail.ru', '@hotmail.com');
function getRegistr(){
 var rnd = function(x){
 return x[Math.floor(Math.random()*x.length)];
 };
 return {"name": rnd(name),"family": rnd(family),"email": rnd(email)};
};
var t = getRegistr();
alert(JSON.stringify(t));
Ответить с цитированием
  #4 (permalink)  
Старый 03.09.2013, 17:23
Новичок на форуме
Отправить личное сообщение для lllypyn Посмотреть профиль Найти все сообщения от lllypyn
 
Регистрация: 03.09.2013
Сообщений: 3

Сообщение от Яростный Меч Посмотреть сообщение
lllypyn,

доступ есть просто по имени, но строчка var name, family, email; перекрывает внешние переменные, заменяя их на внутренние.
Так я как раз и читал, что замыкания позволяют не засорять глобальную область видимости
Сообщение от рони Посмотреть сообщение
странный массив
var name = new Array('Viktor', 'Daniil', 'Danislav','Osip', 'Ostap');
var family = new Array('Smirnov', 'Ivanov', 'Kuznecov', 'Popov', 'Sokolov');
var email = new Array('@gmail.com', '@tut.by', '@mail.ru', '@hotmail.com');
function getRegistr(){
 var rnd = function(x){
 return x[Math.floor(Math.random()*x.length)];
 };
 return {"name": rnd(name),"family": rnd(family),"email": rnd(email)};
};
var t = getRegistr();
alert(JSON.stringify(t));
Спасибо, а можете пояснить зачем 1 ретурн? И как получить значение допустим name, getRegistr.name?

Последний раз редактировалось lllypyn, 03.09.2013 в 17:26.
Ответить с цитированием
  #5 (permalink)  
Старый 03.09.2013, 17:42
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от lllypyn
Так я как раз и читал, что замыкания позволяют не засорять глобальную область видимости
для этого надо весь твой код поместить внутрь
(function() {
 ...
})();

но тогда внешние name, family, email по прежнему будут перекрываться внутренними.

вывод: внутренние надо убрать.
Ответить с цитированием
  #6 (permalink)  
Старый 03.09.2013, 18:00
Новичок на форуме
Отправить личное сообщение для lllypyn Посмотреть профиль Найти все сообщения от lllypyn
 
Регистрация: 03.09.2013
Сообщений: 3

Сообщение от Яростный Меч Посмотреть сообщение
для этого надо весь твой код поместить внутрь
(function() {
 ...
})();

но тогда внешние name, family, email по прежнему будут перекрываться внутренними.

вывод: внутренние надо убрать.
А почему нельзя вызвать через window.name ? Ведь все глобальные переменные это свойства window.
Ответить с цитированием
  #7 (permalink)  
Старый 03.09.2013, 18:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от lllypyn
пояснить зачем 1 ретурн?
учить js
Сообщение от lllypyn
как получить значение допустим name, getRegistr.name?
getRegistr().name
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить список элементов в localStorage? Бобр Общие вопросы Javascript 8 17.09.2013 14:32
Как получить доступ к элементу объекта по "динамической цепочке" kaf Общие вопросы Javascript 4 15.09.2012 10:06
Получить доступ к тегам в IFrame vamfirius Events/DOM/Window 6 28.04.2011 00:24
iframe и как получить доступ к его содержимому syegorius jQuery 13 14.04.2011 22:05
Как получить raw data с image? lyapharov Общие вопросы Javascript 2 07.04.2011 00:20