Подтвердить что ты не робот

ReferenceError: переменная не определена

Я иногда встречался с этой проблемой, но до сих пор не знаю, что ее вызывает.

У меня есть этот script на странице:

$(function(){
    var value = "10";
});

Но браузер говорит, что "ReferenceError: значение не определено". Однако, если я перейду в консоль браузера и введите

10

или

var value = "10";

любой из них может вернуться 10. В чем проблема с моим script?

Изменить: просто избавиться от "var" может решить проблему.

4b9b3361

Ответ 1

Он объявлен в закрытии, что означает, что он может быть доступен только там. Если вы хотите, чтобы переменная была доступна глобально, вы можете удалить var:

$(function(){
    value = "10";
});
value; // "10"

Это эквивалентно записи window.value = "10";.

Ответ 2

Переменные доступны только в области, которую вы определили. Если вы определяете переменную внутри функции, вы не сможете получить доступ к ней за ее пределами.

Определите переменную с var вне функции (и, конечно, перед ней), а затем назначьте ей 10 внутри функции:

var value;
$(function() {
  value = "10";
});
console.log(value); // 10

Обратите внимание, что вы не должны пропускать первую строку в этом коде (var value;), потому что иначе вы присваиваете значение переменной undefined. Это неправильная практика кодирования и не будет работать в строгом режиме. Определение переменной (var variable;) и присвоение значения переменной (variable = value;) - это две разные вещи. Вы не можете присвоить значение переменной, которую вы не определили.

Здесь может быть неактуально, но $(function() {}) является ярлыком для $(document).ready(function() {}), который выполняет функцию сразу после загрузки документа. Если вы хотите что-то выполнить немедленно, вам это не нужно, иначе будьте осторожны, если вы запустите его перед загрузкой DOM, значение будет undefined, пока оно не будет загружено, поэтому console.log(value);, установленный сразу после $(function() {}), вернется undefined. Другими словами, он будет выполняться в следующем порядке:

var value;
console.log(value);
value = "10";

См. также:

Ответ 3

Получена ошибка (в функции init) со следующим кодом;

"use strict" ;

var hdr ;

function init(){ // called on load
    hdr = document.getElementById("hdr");
}

... при использовании браузера запаса на слайде галактики Samsung (дерьмовый телефон, который делает его хорошим тестером) - userAgent; Mozilla/5.0 (Linux, U, Android 4.1.2; en-gb; GT-S6810P Build/JZO54K) AppleWebKit/534.30 (KHTML, например Gecko) Версия /4.0 Mobile Safari/534.30

Тот же код работает везде, где я пытался, включая браузер на старых телефонах HTC - userAgent; Mozilla/5.0 (Linux, U, Android 2.3.5, en-gb, HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533.1 (KHTML, например, Gecko) Версия /4.0 Mobile Safari/533.1

Исправление для этого заключалось в изменении

var hdr ;

to

var hdr = null ;