Помимо того, что вы объявили только функцию с ошибкой (обратите внимание на точку с запятой сразу после имени функции), ваш код не работает, потому что вы не передаете функцию в атрибуте кнопки onclick
- вы просто передавая возвращаемое значение этой функции там. Вместо этого у вас должно быть <button onclick="myFunction">Check</button>
.
Ниже правильный код:
function myFunction() {
var text_input = document.getElementById("input001").value;
if (text_input == "4") {
document.getElementById("message001").innerText = "Correct!";
} else {
document.getElementById("message001").innerText = "nope";
}
}
<div class=questions>
<p>What is 9-5?</p>
</div>
<input id="input001" type="text" />
<button onclick="myFunction">Check</button>
<p id="message001"></p>
Both should work. But...
Exist tends to be slow, since it must look through your workspace for the variable in question. When you write error checks like this, you don't want them to suck up CPU cycles. The test against nargin is a simple test against a single numeric value.
I'd also generally suggest a more extensive test. Something like
if (nargin<1) || isempty(myparam)
myparam = defaultvalue;
elseif
...
end
Inside the elseif branch, I'll put a set of additional tests to see if the parameter has the expected size, shape, class of variable, etc. If those tests fail, I'll return a friendly error message that explains what was wrong.
Я бы пошел с nargin по двум причинам:
Если вы измените порядок параметров для вашей функции, исправление код проверки ввода будет наименьшей из ваших проблем; вам также придется обновить все сайты вызовов для вашей функции.
nargin намного дешевле. существует, даже если он предназначен для простой проверки переменных, должен сканировать все рабочее пространство, выполняя ряд сравнений строк. метод nargin состоит только из скаляра, меньшего, чем операция.
Я бы выбрал опцию NARGIN , по причинам, указанным SCFrench . Еще одно преимущество: я часто использую его в сочетании с оператором SWITCH , когда у меня более двух входных аргументов:
function outArgs = my_fcn(inArg1,inArg2,inArg3)
switch nargin,
case 0, % No input case
error('Not enough inputs!');
case 1, % Set last 2 inputs to default
inArg2 = 'yes';
inArg3 = 'on';
case 2, % Set last input to default
inArg3 = 'on';
end
...
% Checking of variable types and values would go here!
...
end
Я всегда проверяю аргументы, используя nargchk
, а затем использую тесты nargin
, как они у вас были. Как отмечали другие, они дешевле, и я думаю, что понятнее.
В функциях, которые я ожидаю интенсивного повторного использования, я всегда ставлю много проверок заранее, а затем структурирую код для вызова реальной реализации позже.
Я также склоняюсь к структурированию необязательных аргументов (когда не использую varargin
) примерно так:
function x = myfcn( arg1, opt_arg2 )
if nargin < 2
arg2 = 'default';
else
arg2 = opt_arg2;
end
так как я думаю, это делает более очевидным при редактировании файла, какие аргументы должны быть необязательными.