ReferenceError: переменная не определена
Я иногда встречался с этой проблемой, но до сих пор не знаю, что ее вызывает.
У меня есть этот script на странице:
$(function(){
var value = "10";
});
Но браузер говорит, что "ReferenceError: значение не определено". Однако, если я перейду в консоль браузера и введите
10
или
var value = "10";
любой из них может вернуться 10. В чем проблема с моим script?
Изменить: просто избавиться от "var" может решить проблему.
Ответы
Ответ 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 ;