03.09.2013, 16:35
|
Новичок на форуме
|
|
Регистрация: 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.
|
|
03.09.2013, 16:43
|
Профессор
|
|
Регистрация: 12.04.2010
Сообщений: 557
|
|
lllypyn,
доступ есть просто по имени, но строчка var name, family, email; перекрывает внешние переменные, заменяя их на внутренние.
|
|
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));
|
|
03.09.2013, 17:23
|
Новичок на форуме
|
|
Регистрация: 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.
|
|
03.09.2013, 17:42
|
Профессор
|
|
Регистрация: 12.04.2010
Сообщений: 557
|
|
Сообщение от lllypyn
|
Так я как раз и читал, что замыкания позволяют не засорять глобальную область видимости
|
для этого надо весь твой код поместить внутрь
(function() {
...
})();
но тогда внешние name, family, email по прежнему будут перекрываться внутренними.
вывод: внутренние надо убрать.
|
|
03.09.2013, 18:00
|
Новичок на форуме
|
|
Регистрация: 03.09.2013
Сообщений: 3
|
|
Сообщение от Яростный Меч
|
для этого надо весь твой код поместить внутрь
(function() {
...
})();
но тогда внешние name, family, email по прежнему будут перекрываться внутренними.
вывод: внутренние надо убрать.
|
А почему нельзя вызвать через window.name ? Ведь все глобальные переменные это свойства window.
|
|
03.09.2013, 18:18
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,108
|
|
Сообщение от lllypyn
|
пояснить зачем 1 ретурн?
|
учить js
Сообщение от lllypyn
|
как получить значение допустим name, getRegistr.name?
|
getRegistr().name
|
|
|
|