Помогите разобраться с javascript

O
На сайте с 10.10.2012
Offline
63
795

Всем привет. Вопрос про функции. Объясните чайнику, почему:

1. Так можно:

var erg = [35.23,98.21,56.78,23.12];

function ner(par1,par2) {

for(i=0;i<par1.length;i++) {

var test = par2(erg);
document.write(test + "<br />");
}
}
ner(erg,Math.round);

Но нельзя так:

var erg = [35.23,98.21,56.78,23.12];
function ner(par1,par2) {
for(i=0;i<par1.length;i++) {
var test = Math.par2(erg);
document.write(test + "<br />");
}
}
ner(erg,round);

Почему он ругается во втором случае, он ведь должен вроде как вместо par2 подставить round и тогда получится всё тот же Math.round?

==========================================
Есть код:

var test = prompt("число от 500 до 10000");
var regv = /[а-яА-Яa-z-A-Z]/;
var test2 = test.search(regv);

function hjer(par1,par2) {
var proba = par1.fadeOut(par2);
return proba;
}

if(test < 500 || test > 10000) {
document.write("ошибка");
}

else if (test2 == 0) {
document.write("ошибка");

}
else {

hjer($('#img_1'),test);
}


Беда в том, что в test (второй параметр) не подставляется то число, которое передал пользователь. Т.е. картинка берет и сворачивается сразу, не взирая на количество миллисекунд. Где ошибка? P.S. Если же я в качестве второго параметра(или аргумента, еще не разобрался, как правильно) задам цифру вручную (т.е. будет не var proba = par1.fadeOut(par2); а var proba = par1.fadeOut(9000); , то всё работает нормально.

Всем заранее спасибо, хотелось бы закрыть этот пробел в знаниях.

K0
На сайте с 01.09.2016
Offline
72
#1
olegpetrovichh:
Почему он ругается во втором случае, он ведь должен вроде как вместо par2 подставить round и тогда получится всё тот же Math.round?

Кому должен? 😂 В первом случае вы передаете ссылку на Math.round которую и вызываете. Во втором случае вы пытаетесь вызвать функцию с именем par2 объекта Math. Функции такой нет, поэтому и ругается.

ДП
На сайте с 23.11.2009
Offline
203
#2

Про первый вам пояснили уже. Вы имя переменной со значением перепутали.

Если хотите имя передавать, то надо типа так

при вызове


ner(erg,'round');

внутри функции


Math[par2](erg)

Но, честно скажу, выглядит диковато.

По второму вопросу - во-первых, советую использовать отладчик в браузере и пошагово прогнать, может где-то с областью видимости ошиблись или перезаписали перменную.

Ну и на всякий случай попробовать привести к числу через parseInt() внутри функции.

O
На сайте с 10.10.2012
Offline
63
#3

kom09,Дикий пионер спасибо, по первому случаю теперь всё стало понятно.

Касаемо второго я там дал недостаточно данных, вероятно. Этот код уже с использованием jquery (и я привел его немножко не в том виде). Смотрите, вот та же самая работающая функция, но без параметров:

var test = prompt("число от 500 до 10000");

var regv = /[а-яА-Яa-z-A-Z]/;

var test2 = test.search(regv);

function hjer() {

$('#img_1').fadeOut(4000);

}

if(test < 500 || test > 10000) {

document.write("ошибка");

}

else if (test2 == 0) {

document.write("ошибка");

}

else {

hjer();

}

В качестве параметров я хотел изменять те места, что выделил жирным. Т.е. чтобы я сам мог изменить картинку и чтобы в .fadeout() подставлялось то значение, что я запросил в var test = prompt("число от 500 до 10000");

ДП
На сайте с 23.11.2009
Offline
203
#4

Выглядит-то код нормально, сейчас проверил - fadeOut() и строку понимает.

Открывайте средства разработчика, смотрите что пишет в консоли.

Ну и отладчиком либо console.log() пользуйтесь. https://habrahabr.ru/post/114483/

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий