Строгое нарушение с использованием этого ключевого слова и раскрытие шаблона модуля

Возникли проблемы с передачей следующего кода jslint / jshint

/*jshint strict: true */
var myModule = (function() {
    "use strict";

    var privVar = true,
        pubVar = false;

    function privFn() {
        return this.test; // -> Strict violation.
    }

    function pubFn() {
        this.test = 'public'; // -> Strict violation.
        privFn.call(this); // -> Strict violation.
    }

    return {
        pubVar: pubVar,
        pubFn: pubFn
    };

}());

myModule.pubFn();

Я понимаю, что это вызвано использованием this в объявлении функции, но я прочитал кое-что, что написал Крокфорд, и он сказал нарушение предназначено для предотвращения загрязнения глобальной переменной - но единственная глобальная переменная здесь - это та, которую я явно определяю ... myModule . Все остальное находится в непосредственной области действия функции, и я могу использовать this для ссылки на модуль.

Есть идеи, как я могу заставить этот шаблон пройти?

Обновление: , если я использую выражение функции вместо объявления, это, похоже, работает, т.е.

var pubFn = function () { ...

Я не фанат этого формата, но предпочитаю, чтобы имя функции и именованные параметры были ближе, а объявление выглядит / кажется более чистым . Честно говоря, я не понимаю, почему это является нарушением - в этом шаблоне нет причин для этого.

53
задан Matty F 9 June 2011 в 15:03
поделиться