Как я могу передать аргументы анонимным функциям в JavaScript?

76
задан Eric Leschinski 27 February 2014 в 19:46
поделиться

8 ответов

Ваш конкретный случай может просто быть исправлен для работы:

<script type="text/javascript">
  var myButton = document.getElementById("myButton");
  var myMessage = "it's working";
  myButton.onclick = function() { alert(myMessage); };
</script>

Этот пример будет работать, потому что анонимная функция, созданная и назначенная обработчиком к элементу, будет иметь доступ к переменным определенным в контексте, где это было создано.

Для записи, обработчик (что Вы присваиваете посредством установки onxxx свойство) ожидает, что отдельный аргумент возьмет, который является объектом-событием, передаваемым DOM, и Вы не можете вызвать передачу другого аргумента там

69
ответ дан Dave Jarvis 24 November 2019 в 11:18
поделиться

То, что Вы сделали, не работает, потому что Вы связываете событие с функцией. По сути, это - событие, которое определяет параметры, которые назовут, когда событие будет сгенерировано (т.е. JavaScript не знает о Вашем параметре в функции, которую Вы связали с onclick, так ничего не может передать в него).

Вы могли сделать это однако:

<input type="button" value="Click me" id="myButton"/>

<script type="text/javascript">

    var myButton = document.getElementById("myButton");

    var myMessage = "it's working";

    var myDelegate = function(message) {
        alert(message);
    }

    myButton.onclick = function() { 
        myDelegate(myMessage);
    };

</script>
24
ответ дан Nathan 24 November 2019 в 11:18
поделиться

Путем удаления параметра из анонимной функции будет доступно в теле.

    myButton.onclick = function() { alert(myMessage); };

Для большего количества информации ищут 'закрытия JavaScript'

9
ответ дан Aleris 24 November 2019 в 11:18
поделиться

Обработчики событий ожидают один параметр, который является событием, которое было запущено. Вы, оказывается, переименовываете это к 'myMessage', и поэтому Вы предупреждаете объект-событие, а не Ваше сообщение.

закрытие А может позволить Вам ссылаться на переменную, которую Вы определили вне функции однако при использовании JQuery, можно хотеть посмотреть на его событие определенный API, например,

http://docs.jquery.com/Events/bind#typedatafn

, Это имеет опцию для передачи в собственных данных.

5
ответ дан wioota 24 November 2019 в 11:18
поделиться

Пример:

<input type="button" value="Click me" id="myButton">
<script>
    var myButton = document.getElementById("myButton");
    var test = "zipzambam";
    myButton.onclick = function(eventObject) {
        if (!eventObject) {
            eventObject = window.event;
        }
        if (!eventObject.target) {
            eventObject.target = eventObject.srcElement;
        }
        alert(eventObject.target);
        alert(test);
    };
    (function(myMessage) {
        alert(myMessage);
    })("Hello");
</script>
1
ответ дан Shadow2531 24 November 2019 в 11:18
поделиться

Делегаты:

function displayMessage(message, f)
{
    f(message); // execute function "f" with variable "message"
}

function alerter(message)
{
    alert(message);
}

function writer(message)
{
    document.write(message);
}

Выполнение функции displayMessage:

function runDelegate()
{
    displayMessage("Hello World!", alerter); // alert message

    displayMessage("Hello World!", writer); // write message to DOM
}
1
ответ дан cllpse 24 November 2019 в 11:18
поделиться

То, что Вы сделали, создается новая анонимная функция, которая берет единственный параметр, который тогда присвоен локальной переменной myMessage в функции. Так как никакие аргументы на самом деле не передаются, и аргументы, которые не передаются, значение становится пустым, Ваша функция просто предупреждает (пустой указатель).

0
ответ дан Ignacio Vazquez-Abrams 24 November 2019 в 11:18
поделиться

Если Вы запишете его как

myButton.onclick = function() { alert(myMessage); };

, то Это будет работать, но я не знаю, отвечает ли это на Ваши вопросы.

0
ответ дан tpower 24 November 2019 в 11:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: