Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Видимость переменной во вложенной функции (https://javascript.ru/forum/css-html/76079-vidimost-peremennojj-vo-vlozhennojj-funkcii.html)

Rovor 02.12.2018 19:33

Видимость переменной во вложенной функции
 
Здравствуйте, прошу помочь вот с чем.
Пишу скрипт который будет собирать информацию со страницы в WebSQL.
Но столкнулся с тем, что переменная счетчика цикла i не видна в функции tx. Подскажите, как исправить?

for (i=0;i<count.length;i++){
    db.transaction(function(tx) {
        tx.executeSql("INSERT INTO players (galaxy, system, planet, planetname, name, alliance) VALUES (?,?,?,?,?,?);",[galaxy,system,planet[i],planetname[i],player[i],alliance[i]]);});}


Здесь привожу полный текст скрипта:


var planet = Array();
var planetname = Array();
var player = Array();
var alliance = Array();
var i = 0;
var db = openDatabase("SK", "1", "Players", 200000);
//db.transaction(function(tx) {tx.executeSql("CREATE TABLE players (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, galaxy INT, system INTEGER, planet INTEGER, planetname TEXT, name TEXT, alliance TEXT);")});
var galaxy = Number($("[name='galaxy']")[0].value)
var system = Number($("[name='system']")[0].value)
var count = $(".galaxy_row");
    for (i=0;i<count.length;i++){
planet[i] = Number($(".galaxy_row")[i].children[1].innerText)
planetname[i] = $(".galaxy_row")[i].children[3].innerText
player[i] = $(".galaxy_row")[i].children[6].innerText
alliance[i] = $(".galaxy_row")[i].children[7].innerText
db.transaction(function(tx) {tx.executeSql("INSERT INTO players (galaxy, system, planet, planetname, name, alliance) VALUES (?,?,?,?,?,?);",[galaxy,system,planet[i],planetname[i],player[i],alliance[i]]);});

рони 02.12.2018 20:06

Rovor,
переделайте for на each

Rovor 02.12.2018 20:34

рони,
Можно чуть подробнее, пожалуйста?)

рони 02.12.2018 20:47

Rovor,
var i = 0;
count.each(function(i, elem) {
  planet[i] = Number(elem.children[1].innerText);
  //...
	});

Rovor 02.12.2018 21:11

рони,
Спасибо огромное, проблема решена)
Если несложно, объясните, пожалуйста, в чём была ошибка?

рони 02.12.2018 21:24

Rovor,
переменная i сохраняла последнее значение, а не то которое было в момент формирования, если нужно сохранить значение используют замыкание с помощью методов типа each или заменяют var на let(если возможно).

рони 02.12.2018 21:28

Rovor,
https://learn.javascript.ru/let-const
пункт 3 по ссылке

Rovor 02.12.2018 22:19

рони,
Спасибо!)


Часовой пояс GMT +3, время: 14:18.