2013-12-05 5 views
1

Глядя на this code, в функции прототипа onDiagramлинии 30 мы имеем:Scope примерочных объявленная переменная

proto.onDiagram = function (message, address) { 
    message = this.arrayBufferToString(message); 
    try { 
    var obj = JSON.parse(message); 
    } catch (e) { 
    return; 
    } 
    if (!obj) { 
    return; 
    } 
    switch (obj.type) { 
    ... 

не obj бы быть локальными try здесь? Ожидается ли код быть:

var obj; 
try { 
    obj = JSON.parse(message); 
} catch (e) { 
    ... 
+1

В JavaScript объем переменных, объявленных в функциях, обычно представляет собой целую функцию. Некоторые браузеры поддерживают декларацию 'let', которая еще больше ограничит область. – kviiri

ответ

3

Не будет OBJ быть локальным попробовать здесь?

№ Объявление объявляется (как и все объявления) вверху контекста выполнения. Код эффективно интерпретируется, как вы показали во втором примере. Пока значение не присвоено obj, оно неявно имеет значение undefined.

JavaScript (ES5, во всяком случае) не имеет области блока, поэтому невозможно включить объявление переменной в блок try. Она всегда будет видна закрывающей функции.

+0

OK. Спасибо, полагаю, что я родила отчасти JSHint. Прошел тест сейчас, и он жалуется на «переменную, используемую вне сферы действия». (Верьте, что я там, у меня есть. Как и раньше, это было раньше.) Это плохая практика? – Zimzalabim

+1

@ Zimzalabim - Это можно считать плохой практикой по той причине, что вы задали этот вопрос: это сбивает с толку. Объявляя переменную за пределами блока, она упрощает разработку того, что происходит с первого взгляда. –

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