Не объявляется переменная в JS

250
10 ноября 2017, 11:01

Добрый день!

Есть некоторый, мною написанный код на JS.

onload = function(){
/* events */
O('start').onclick = function(){start()}
O('backtooptions').onclick = function(){stop()}
O('skip').onclick = function(){skip()}
O('confirmanswer').onclick = function(){confirmanswer()}
/*variables*/
settin = new Object();
settin = {
    time:0,
    negative: false,
    sym:{
        add:false,
        sub:false,
        mul:false,
        div:false
    },
    range:{
        min: 0,
        max:0
    }
}
function stop(){
    S('play').display='none';
    S('options').display='';
}
function confirmanswer(){
}
function checktime(time){
    if(time <= 0){
        return 0;
    }
    if(time > 10){
        return 10;
    }
    else{
        return time;
    }
}
function checksettings(){
    var signs = 0;
    for (var i = 0; i < signs.length(); i++){
    }
}
function start(){
    S('options').display='none';
    S('play').display='';
    options.time = checktime(Math.floor(parseInt(O('time').value)));

}
train = "Hello";
function generator(min,max){
}
}

У меня есть несколько вопросов по нему, а именно:

Вопрос первый: После объявления переменной например var a = 'a';, при попытке вызвать ее в браузерной консоли, пишет что: "переменная не определена", но если код взаимодействует с ней, то все работает(но ее также нельзя вызвать из консоли).

Проблема решена с помощью удаления var.

Собственно вопрос: Почему переменная объявляется только при отсутствии var?

Вопрос два: С функциями тоже самое, их нельзя вызвать через консоль, но вот например, на события функции вешаются отлично.

PS

Что касается функций O и S:

function O(i){
    return typeof i == 'object' ? i : document.getElementById(i);
}
function S(i){
    return O(i).style;
}
Answer 1

Когда переменная объявлена в функции, то доступа к ней из вне нет, это локальная переменная.

(function() { 
  var f = "первая"; 
  console.log(f); 
  d = "вторая"; 
  console.log(d) 
})() 
 
console.log(d)

А если ты переменную не объявляешь. Парсер делает следующее. создает вне функции переменную var d; потом в функции в присваивает значение и уже она становится не локальной, а глобальной. По этому без var она тебе доступна вне функции

READ ALSO
Проложить путь к элементу таблицы

Проложить путь к элементу таблицы

Как прописать путь с помощьюparent() к таблице показанной на скриншоте? На данный момент прописанный путь в JS работает с таблицей что сверху

266
Как создать ссылки из значений массива

Как создать ссылки из значений массива

Имеется массив произвольной длины, те

180
Как реализовать такой автокомплит?

Как реализовать такой автокомплит?

Есть вот такой вот сайт у него в поиске интересный автокомплит, подскажите как можно реализовать такой же или подобный? Возможно есть какие...

186