2016-12-27 2 views
0

У меня есть переменная Js который генерируется через PHP на странице PHP:Javascript короткого замыкания не возвращает правильное значение

<script type="text/javascript"> 
    var shadeData = <?php echo $formattedShadeData; ?>; 
</script> 

Эта переменная будет определена только на одной странице, так что я хочу, чтобы предотвратить другие страницы от ошибки при загрузке. В одном из моих файлов JavaScript, я хочу, чтобы остановить запуск кода, если переменная еще не определена, так что я пытался:

var shadeData = shadeData || null; 

if(!shadeData){ return false; } 

Однако, это не работает, и я все еще получаю shadeData не определен. В коде ниже этих строк есть пара функций, которые используют эту переменную, но в идеале это не будет выполняться, если вторая строка возвращает false.

+0

Установите 'shadeData' в' null' или 'false' в вашем PHP-скрипте. JavaScript странный с неопределенными значениями. – www139

+0

Сначала: не используйте несколько деклараций 'var' для одной и той же переменной. Второй: если вы вызываете какой-либо переменный ввод через php, просто оберните 'json_encode ($ formattedShadeData)' вокруг переменной php. Это предотвращает синтаксические ошибки, если '$ formattedShadeData' пуст. – Tyr

+0

@ ww139 спасибо, я попробую это, если ничего не сработает. Мой инстинкт заключается в том, чтобы поместить его в JS – user3006927

ответ

1

Вы не можете использовать return в глобальном/верхнем уровне программы JavaScript.

Ваша идея должна работать нормально после незначительной настройки: заверните весь свой код в IIFE.

// If shadeData is already defined and falsey, this is unnecessary. But included for clarity. 
var shadeData = shadeData || null; 

(function() { 
    if (!shadeData) { 
     return; 
    } 
    // From now on within this function, shadeData is truthy. 
}()); 

// shadeData is not necessarily truthy down here. 
console.log('shadeData:', shadeData); 

В реальном мире это, как правило, будет осуществляться с помощью основной функции входа (часто с именем init), который называется условно.

function init() { 
    // I am only run when shadeData is truthy. 
} 
if (shadeData) { 
    init(); 
} 
+0

Спасибо! Я пытаюсь второй вариант, но я все еще получаю shadeData не определен – user3006927

+0

Это бросается линией if (shadeData). Кажется, что оператор if не завершает код – user3006927

+0

Только 'return' способен« останавливать »код из продолжения. Но, очевидно, конструкции 'if' /' else' могут гарантировать условия, при которых выполняется определенный код. Возможно, вам нужен 'else {}' вокруг вашего кода, который бросает? 'if (shadeData) {} else {codeThatIsThrowing(); } ' –

Смежные вопросы