2014-01-13 5 views
0

Мне нужно передать объект другой функции, но у меня проблемы с глобальными переменными, которые ссылаются внутри объекта.Переменные Javascript в объекте

var a = 'first variable'; //SAMPLE GLOBAL VARIABLE 
var b = 'second variable'; //SAMPLE GLOBAL VARIABLE 

function iterator(options){ 
    for(var c in options){ 
    alert(c + ' ' + options[c]);  
    } 
} 

function main(){ 
    iterator({ 
     a:'5', 
     b:'6' 
    }); 
} 

Функции должны предупредить выход ниже

first variable 5 
second variable 6 

Но вместо этого я получаю

a 5 
b 6 

Мне нужно использовать переменные внутри объекта.

+0

Не используйте локальную переменную с тем же именем, что и глобальное, похоже, что вы ищете проблемы, есть много имен переменных, которые вы можете использовать. – lastboy

+0

yup обновлено, но все еще не работает – Kiel

+0

@Kiel проверить мой ответ сейчас. 'alert (a + '' + options [c]); ' –

ответ

2

По вашей линии I need to use variables inside the object, я предлагаю вам переписать main, как показано ниже:

function main(){ 
    var obj = {} 
    obj[a] = '5'; 
    obj[b] = '6'; 
    iterator(obj); 
} 

Поскольку a внутри for-in цикла будет создавать новую переменную внутри цикла и относятся к каждому ключу объекта

+0

Это работает спасибо. Мне может потребоваться изменить много кодов lol – Kiel

+0

@Kiel: Cheers !!! :) – ram

+0

Также для вопроса выше приведен ответ для единственного js http://jsfiddle.net/nB5m3/2/ от @ ling.s – Kiel

0

var a здесь специально для создания переменной новый с областью видимости функции, что тени глобальной переменной:

function iterator(options){ 
    for(var a in options){ 
    alert(a + ' ' + options[a]);  
    } 
} 

Вы не можете сделать это, если вы все еще хотите получить доступ к глобальным ...

2

a в функции - это локальная переменная, объявленная в цикле for.

var a = 'first variable'; //SAMPLE GLOBAL VARIABLE 
var b = 'second variable'; //SAMPLE GLOBAL VARIABLE 
var opts = {a: a, b: b}; 

function iterator(options){ 
    for(var a in options){ 
    alert(opts.a + ' ' + options[a]);  
    } 
} 
+0

извините, но глобальная переменная opts не может быть глобальной, потому что Я бы передал объект в библиотеку javascript. Извините, если я не упоминал, я думал, что это не фактор. – Kiel

+0

+1, ну .. @ Киль, это может быть ответ –

+0

Не работал извините. Две функции фактически разделены на два файла javascript.В коде будет много изменений для доступа к глобальной переменной, выбранной из другого файла javascript. Но если у меня только 1 файл, это работает. – Kiel

1

A & b, которые вы пытаетесь получить, привязаны к объекту Window.

Когда вы печатали «a» или «b» в противном случае, он печатал ключ «a» из ключа/значения вашего JSON.

$(window).load(function() { 
main(); 
}); 

и

function iterator(options){ 
    for(var a in options){ 
    alert(window[a] + ' ' + options[a]);  
    } 
} 

Fiddle

+0

'window [a]' undefined –

+0

Вы определили var a = 'first variable'; как пример? это должно работать, я проверил себя. – gauravmuk

+0

и сделать это после загрузки окна, иначе переменная может быть не определена до фактического выполнения скрипта. – gauravmuk

1

Согласно редактирования, ОП в настоящее время изменили имя переменной, так что теперь переменная а может быть прямой доступ

function iterator(options){ 
for(var c in options){ 
    alert(a + ' ' + options[c]);  
} 
} 

Здесь является Fiddle

+0

работает с одним файлом js. Мне нужна основная функция в отдельном файле, поэтому я не могу получить доступ к глобальной переменной a. Я просто сделал js здесь более простым, но файл js, где присутствует «итератор функции», фактически находится внутри библиотеки js, к которой я мог бы получить доступ из основного javascript. – Kiel

+0

спасибо и извините, если я не упомянул библиотеку js. – Kiel

Смежные вопросы