Почему IE не принимает скобки, когда мы вызываем функцию - PullRequest
2 голосов
/ 17 августа 2011

Я не знаю, почему у меня есть такая функция:

<script type="text/javascript">
    function setSomeEnvValue() {
        myLoadStatus = true;
        myColor = 'black';
    }
    window.onload = setSomeEnvValue();
</script>

Я не знаю, почему IE показывает ошибку при:

window.onload = setSomeEnvValue();

Когда я изменяю этот код на:

window.onload = setSomeEnvValue;

Это сводит меня с ума. Если setSomeEnvValue() имеет несколько аргументов, таких как setSomeEnvValue(myVar1, myVar2), как я могу вызвать его при использовании в IE?

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 17 августа 2011

В этом случае IE имеет правильную реализацию.

Когда вы устанавливаете обратный вызов (или обработчик события), такой как window.onload, вы в основном говорите браузеру, что передаваемая им функция должна выполняться при запуске этого события.

Написав window.onload = setSomeEnvValue();, вы говорите, что возвращаемое значение setSomeEnvValue должно вызываться всякий раз, когда срабатывает событие window.onload. Конечно, это может быть возможным, если ваша функция возвращает закрытие, но я собираюсь предположить, что это не так.

2 голосов
/ 17 августа 2011

Что означает window.onload = setSomeEnvValue(); - это запустить setSomeEnvValue() сейчас и присвоить результат window.onload.Вам нужно назначить саму функцию window.onload, чтобы браузер мог запустить ее позже.

Если вы хотите, чтобы window.onload вызывал функцию с заранее известными аргументами, сделайтеновая функция (без аргументов), которая вызывает другую функцию с нужными аргументами и присваивает , что , window.onload.

function myOnload() {
  setSomeEnvValue(myVar1, myVar2);
}

window.onload = myOnload;

или даже

window.onload = function() { setSomeEnvValue(myVar1, myVar2); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...