Переменная из строки и область видимости
Наверное я сам себя загнал в такую задачу и можно решить по-другому, и всё же. из БД нужно выдернуть массив, на основании значения из [0] создать переменную и присвоить ей остальной массив.
function somefunc() { arr = [х, 0, 1, 2...]; varname = arr.shift(); this[varname] = arr; } это понятно и работает. проблема в том, что этот разбор производится внутри функции, и переменные снаружи не видно. как объявить переменную перед функцией, ведь вот так не получится: var this[varname] = 0; подытожу, вопрос именно в этом: как создать переменную по имени из строки понятно, а вот как её объявить - не очень. |
Если вы хотите объявить переменную которую можно было бы использовать в любой части программы то нужно объявлять ее вне функции
var global_var; function funck(){ var global_var = "new"; // (не правильно) если внутри функции поставить var перед переменной с таким же именем то вроде бы если я правильно помню вы объявляете новую локальную переменную при это значение глобальной изменятся не будет global_var = "new"; // (правильно) //cod... } |
что переменные нужно объявить снаружи функции, это понятно.
но как это сделать, если имя переменной мне заранее неизвестно? расширю немного свой вопрос: var variables = ['x', 'y', 'z']; // три переменных, которые нужно создать ... for (i=0;i<variables.length;++i){ var this[variables[i]]; // хотелось бы объявить вот так, но так нельзя. а как? } ... somefunc(variables); console.log(x,y,z); // undefined function somefunc(v) { for (i=0;i<v.length;++i){ this[v[i]] = 1; // объявляется внутри ф-ии } console.log(x,y,z); // x=1, y=1, z=1 } |
Я не понимаю, вы не знаете имен переменных или их количество или что то еще? Как они вообще у вас создаются тогда если вы сами их не знаете?
Не понятно... |
да, я не знаю не имен переменных, ни их количество. если упрощать, идея такая: пользователь сам придумывает имена переменных и значения, (x=1, y=2, z=3) сам пишет формулы (x+y+z). я разбираю формулы, создаю переменные и считаю.
самый простой алгоритм - это создать одноименные переменные (как в формуле), присвоить им значения, и сделать eval() формуле. о вопросах безопасности в курсе, все переменные буду проверять перед eval(). |
Мммм не знаю, может мне знаний не хватает я только новичек но честно говоря не уверен что так можно делать как вы предлагаете :(
Как вариант можно создать массив в который будут добавляться новые значения каждый раз при вызове функции и потому уже обращаться к этому значению по его индексу в массиве, может можно сделать как то похитрее что нибудь вроде двумерного массива или какого нибудь объекта в объекте хз... Тут вам нужен кто то более подкованный чем я... Вот мой пример <!doctype html> <html> <head> <title>Мммм...</title> <script> var mass_name = new Array(); var mass_value = new Array(); var now_var; function new_var(){ var valueV = document.getElementById("value_var").value; var valueN = document.getElementById("value_name").value; mass_name.push(valueN); mass_value.push(valueV); } function out_var(){ var valueN = document.getElementById("name_val").value; var v = 0; for(a in mass_name){ mass_name[v]==valueN?now_var = v : v++; } if(mass_name.length<=v) document.getElementById("info").innerHTML = "Не верное имя переменной"; else document.getElementById("info").innerHTML = mass_name[v]+" "+mass_value[v]; } </script> <body> <input type="text" id="value_name"> <input type="text" id="value_var"> <input type="button" value="Создать переменную" onClick="new_var()"><br> Если вы хотите получить значение переменной укажите ее имя:<br> <input type="text" id="name_val"> <input type="button" value="Вывести" onClick="out_var()"> <output id="info"></output> </body> </html> |
всё это хорошо, но не решает основной задачи: расчёта по введённой пользователем формуле.
введите параметр №1: x=1 введите параметр №2: y=2 ... введите формулу: x+y ------------------------------ решение: 3 причем формула оперирует не параметрами (например П.№1 + П.№2) а именно именами переменных, которые придумал пользователь. сейчас попробую решить через: 1. объявляю ассоциативный массив var arr = (); 2. внутри ф-ии собираю в него переменные в виде ключ => значение 3. разбираю формулу чтобы получилось так: было: x+y+z стало: arr[x]+arr[y]+arr[z] 4. делаю этой новой формуле eval(); ps. я тоже начинающий программист :))) |
Цитата:
var arr = {}; |
Цитата:
<!doctype html> <html> <head> <title>Мммм...</title> <script> var mass_name = new Array(); var mass_value = new Array(); var now_var; function new_var(){ var valueV = document.getElementById("value_var").value; // создаем имя переменной var valueN = document.getElementById("value_name").value; // создаем ее значение // первый массив у нас отвечает за имя новой переменной а второй за ее значение // их можно создавать сколько угодно mass_name.push(valueN); mass_value.push(valueV); } function out_var(){ var valueN = document.getElementById("name_val").value; var v = 0; for(a in mass_name){ mass_name[v]==valueN?now_var = v : v++; } if(mass_name.length<=v) document.getElementById("info").innerHTML = "Не верное имя переменной"; else document.getElementById("info").innerHTML = mass_name[v]+" = "+mass_value[v]; } </script> <body> Имя переменной <input type="text" id="value_name"><!--Указываем имя переменной--> Значение переменной <input type="text" id="value_var"><!--Значение переменной--> <input type="button" value="Создать переменную" onClick="new_var()"><br> <!--Создаем переменную с указанным именем и значением после чего можете записать в массив еще несколько переменных с другими значениями и тд--> Если вы хотите получить значение переменной укажите ее имя:<br> <input type="text" id="name_val"> <!--тут вы получаете значение переменной которую создали по ее имени, и можете делать с ним что угодно, либо вытащить другое значение другой переменной--> <input type="button" value="Вывести" onClick="out_var()"> <output id="info"></output> </body> </html> Я написал код в котором вы вводите в первое поле ИМЯ переменной а во второе поле ее ЗНАЧЕНИЕ после чего вы можете по имени своей переменной вытащить то значение которое как бы в нее сохраняли и с этими значениями делать все что хотите. Таким образом вы сами определяете имя переменной, ее значение и имеете возможность создать любое количество этих "переменных". Если у вас есть какая то формула подставляйте их в нее и тд. |
Цитата:
var array = ['x', 'y', 'z'], expression = "x+y+z"; somefunc(); eval(expression); // undefined+undefined+undefined function somefunc(){ this[array[0]] = 1; // x=1 this[array[1]] = 2; // y=2 this[array[2]] = 3; // z=3 } |
Часовой пояс GMT +3, время: 15:39. |