2014-02-02 4 views
3

У меня есть следующий код, и я получаю 'myGlobal', используемый вне сферы действия. Я должен вернуть myGlobal или новый объект, потому что объект добавлен в другие файлы.JSLint Out of Scope

var myGlobal= (function (my) { 
    'use strict'; 

    return my; 
}(myGlobal|| {})); 

Есть ли способ удовлетворить jsLint в этом случае?

+1

[Скажи JSLint игнорировать код] (http://stackoverflow.com/questions/599859/jslint-control-comments-selective-ignore) –

+0

мог объявить и установить отдельно: 'вар myGlobal; myGlobal = ((...) (myGlobal || {})); ' –

+0

@JonathanLonowski: Это просто эквивалентно' var myGlobal; myGlobal = ((...) ({})); '? – hugomg

ответ

2

Когда я сталкиваюсь с этим, я думаю, что обычно обманываю. В контексте браузера, например, все глобальные переменные действительно живут на window объекта, так что вы можете сделать что-то вроде этого:

/*jslint sloppy:true, white:true, browser:true */ 
window.myGlobal = (function (my) { 
    'use strict'; 

    return my; 
}(window.myGlobal|| {})); 

Это логически сводится к тому же, и делает JSLint счастливым.

Быстрое редактирование: альтернативно, хотя это по сути один и тот же трюк сначала (и это звучит так, как будто это потенциально то, что вы уже пытаетесь настроить с помощью myGlobal), рассмотрите группировку ваших глобалов в пространства имен, которые вы определяете как глобальные , как это ...

/*jslint sloppy:true, white:true, browser:true */ 
/*global MyNamespace */ 
MyNamespace.myGlobal = (function (my) { 
    'use strict'; 

    return my; 
}(MyNamespace.myGlobal|| {})); 

Хотя это своего рода аналогичная ситуация. Если вы не можете быть абсолютно уверены, что у вас есть определение MyNamespace где-то раньше, вы находитесь в той же лодке, в которой вы сейчас пытаетесь проверить наличие MyNamespace.

Таким образом, быстрый ответ сводится к трюку window, выше.

0

Использование this в качестве контекста для глобальной области:

var myGlobal= (function (my) { 
    'use strict'; 

    return my; 
}(this.myGlobal|| {})); 

То же самое может быть сделано для объектов браузера хост, такие как document:

var controller = {}; 

this.model = {"view": this.document || NaN, "viewmodel": controller.foo }; 


controller.foo = function myfoo(model) { 
    'use strict'; 
    return model.document.title; 
}; 

this.model.viewmodel(this.model); 

Список литературы