Выражение функции с аргументами

#javascript

#javascript

Вопрос:

Я играл с выражениями функций и пытался разобраться в некоторых вещах.Это код, который я написал.

Это работает

 var sum=function(arg1,arg2){
    return(function(){alert(arg1*arg2)})
}

document.getElementById('button_1').onclick=sum(3,2);
  

Это не так, я знаю, что это даже выглядит неправильно.Но я просто пытаюсь понять причину ошибки, которая отображалась здесь.Сначала отобразилось окно предупреждения с цифрой 6, а затем сообщение об ошибке «Не реализовано», это в IE6.

 var sum=function(arg1,arg2){
    alert(arg1*arg2);
}

document.getElementById('button_1').onclick=sum(3,2);
  

Если вы, ребята, считаете, что этот вопрос не требует ответа, пожалуйста, дайте мне знать, я удалю его.

Спасибо

Ответ №1:

Во втором примере ваша переменная sum не возвращает указатель на функцию. onclick Событие должно быть присвоено указателю на функцию. Итак, во втором примере вы напрямую вызываете функцию sum, передавая ей два аргумента, и поскольку эта функция ничего не возвращает (она просто предупреждает), она не работает. Чтобы заставить его работать со вторым примером, вам нужно:

 document.getElementById('button_1').onclick = sum;
  

Но как только кнопка нажата, она передаст единственный аргумент этой функции sum, которая представляет событие.

В первом примере вы вызываете функцию sum, передавая ей два аргумента, но этот вызов просто возвращает другую функцию, которая затем присваивается событию onclick.

Я думаю, вы хотите этого, хотя:

 document.getElementById('button_1').onclick = function() { sum(3,2); };
  

Комментарии:

1. @Darin если нужно было сделать, чтобы сделать это, document.getElementById(‘button_1’).onclick=sum; , это предупреждает меня с помощью NaN. Так должен ли я возвращать функцию, когда мне нужно передать параметры для выражения функции, которое соответствует событию onclick?

2. @manraj82, если вы используете обработчик onclick, единственным аргументом, который будет передан, будет событие. Итак, если вы хотите назначить некоторую функцию событию onclick, эта функция может принимать только один аргумент, который является событием. Вы не можете назначать функции, которые принимают несколько аргументов, при нажатии кнопки javascript не знает, какие значения передавать этой функции.

3. @Darin Значит ли это, что мне лучше поступить так, тогда <тип ввода =»button» id =»button_1″ onClick =»сумма (3,2)»>

4. @manraj82, onclick="sum(3,2)" будет работать, но если вы хотите сделать это незаметно, я бы порекомендовал вам следующее: document.getElementById('button_1').onclick = function() { sum(3,2); };

5. @Darins спасибо, это ответ, который я искал, теперь мне все ясно!!

Ответ №2:

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

Объявить функцию с локальной областью действия:
var enableStopBtn = function('videoBtnId') {
// do something
}

Вызов переменной: enableStopBtn('myVideob');