@vldmir если передавать по ссылке, то никак. Условно говоря, вот это делает то же самое:
var global = 'А вот и я';
(function(f){
'use strict';
var window, document;
console.log(window, document, this, global);
}).call({});
Просто как только мы передаём функцию в качестве аргумента, мы тут же получаем внутри значения по ссылке для переданных аргументов. Без аннигиляции ссылок (eval или new Function, что, ка вы уже заметили, монопенисуально) ликвидировать это не выйдет.
Так что либо контекст eval, либо нулёвый контекст какого-нибудь динамически созданного iframe. Иначе — замыкания и здравствуйте все.
@istasiik отдельный? Если вас нет своих скриптов на странице, то да — отдельный файл и лучше с атрибутом async. Если уже есть, лучше дописать к какому-нибудь из них.
Вставлять скрипты можно где угодно, но вопрос выбора куда именно не так прост. Если с атрибутом async, то неважно где. Если же скрипт загружается синхронно... То тут мы просто выйдем за рамки вашего вопроса и далеко.
Если кратко, скажу так — коли вы своих скриптов не используете, вставляйте в head.
@Vadim997 зайдите на любой сайт, перейдите по ссылке на другую страницу, а потом вручную в адресной строке наберите facebook.com, заранее предварительно разлогинившись на нём. Авторизуйтесь. Нажмите кнопку Back несколько раз. Куда попали?