Просмотр полной версии : Замыкания как получить доступ к переменным
Почитал статьи на хабре по замыканиям. Все вопросы в коде.
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
Яростный Меч
03.09.2013, 16:43
lllypyn,
доступ есть просто по имени, но строчка var name, family, email; перекрывает внешние переменные, заменяя их на внутренние.
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));
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?
Яростный Меч
03.09.2013, 17:42
Так я как раз и читал, что замыкания позволяют не засорять глобальную область видимости
для этого надо весь твой код поместить внутрь
(function() {
...
})();
но тогда внешние name, family, email по прежнему будут перекрываться внутренними.
вывод: внутренние надо убрать.
для этого надо весь твой код поместить внутрь
(function() {
...
})();
но тогда внешние name, family, email по прежнему будут перекрываться внутренними.
вывод: внутренние надо убрать.
А почему нельзя вызвать через window.name ? Ведь все глобальные переменные это свойства window.
пояснить зачем 1 ретурн?
учить js
как получить значение допустим name, getRegistr.name?
getRegistr().name
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot