Тестирование с двумя вложенными линейными моделями с использованием кластерных стандартных ошибок в R

Вы не можете ограничить область действия с помощью методов «вызов» или «применить», но вы можете использовать простой трюк, используя «eval» и scoping, чтобы скрыть какие-либо конкретные глобальные переменные от вызываемой функции .

Причина этого в том, что функция имеет доступ к «глобальным» переменным, которые объявлены в области, которую сама функция объявляет. Таким образом, скопировав код метода и введя его в eval, вы можете существенно изменить глобальную область функции, которую вы хотите вызвать. Конечный результат по существу заключается в том, что он может несколько изолировать фрагмент кода javascript.

Вот пример полного кода:

<html>
<head>
<title>This is the page title.</title>
<script>
    function displayTitle()
    {
        alert(document.title);
    }

    function callMethod(method)
    {
        var code = "" +
            // replace global "window" in the scope of the eval
            "var window = {};" +
            // replace global "document" in the scope of the eval
            "var document = {}; " +
            "(" +

            // inject the Function you want to call into the eval
                method.toString() +

            // call the injected method
            ")();" +
            "";
        eval(code);
    }

    callMethod(displayTitle);
</script>
</head>
<body></body>
</html>

Код, который получает eval'd, выглядит следующим образом:

var window = {};
var document = {};
(function displayTitle()
{
    alert(document.title);
})();
0
задан Dale Burrell 18 January 2019 в 06:26
поделиться