, поэтому я изучаю javascript (?), И я столкнулся с этой ситуацией, я не могу найти прямой ответ.
, поэтому у меня есть эти абзацы на html-странице, которые я хочу изменить цвет фонаи код, который у меня работает, таков:
var colors=['red','pink','blue'];
var div2paragraphs = document.querySelectorAll('#div2 p')
for (let paragraph = 0; paragraph < div2paragraphs.length; paragraph++) {
(function(paragraph) {
div2paragraphs[paragraph].onmouseover = function(){
this.setAttribute('style', `background-color: ${colors[paragraph]}`)}
div2paragraphs[paragraph].onmouseout = function(){
this.setAttribute('style', 'background-color: white')}
})(paragraph);
}
Я тоже не совсем понимаю, что здесь происходит, я просто пытался сделать это с помощью всей функции "function () {}"вещь (предположительно называемая анонимной функцией?), но очевидно, что в javascript есть нечто, называемое IIFE, поэтому вам нужно WRAP функцию и передать уникальную переменную, чтобы она запускалась каждый раз внутри цикла, хотя я до сих пор не понимаюпочему я должен закончить это с "(параграф)".
Я думал, можно ли сделать то же самое, просто создав функцию для каждого из этих действий setAttribute, поэтому я попытался написать это такпуть:
var colors=['red','pink','blue'];
var div2paragraphs = document.querySelectorAll('#div2 p')
function changeToColor(color) {
this.setAttribute('style', 'background-color: ' + color);
}
function changeBackWhite() {
this.setAttribute('style', 'background-color: white');
}
for (let paragraph = 0; paragraph < div2paragraphs.length; paragraph++) {
div2paragraphs[paragraph].onmouseover = changeToColor('red');
div2paragraphs[paragraph].onmouseout = changeBackWhite;
}
но что бы я ни делал, всегда возникает ошибка:
Uncaught TypeError: this.setAttribute is not a function
или что-то в этом роде.Я думаю, что в этих ситуациях это как-то связано. Если вы добавите скобку, она вызовет функцию, прежде чем делать что-то еще?так что он не знает, что это такое?я не совсем понимаю, но в любом случае я не имею ни малейшего понятия о том, как написать то же самое, что я делал выше, с отдельными функциями.Кто-нибудь сможет пролить свет на это ...?
Я больше привык к Python, поэтому очевидно, что есть фундаментальные концепции, которые отличаются ...
PS: в чем разницамежду этими двумя примерами ниже?
for (let paragraph = 0; paragraph < div2paragraphs.length; paragraph++) {
div2paragraphs[paragraph].onmouseover = function() {
this.style['background-color'] = colors[paragraph];
}
div2paragraphs[paragraph].onmouseout = function() {
this.style['background-color'] = 'white';
}
}
и этим
for (let paragraph = 0; paragraph < div2paragraphs.length; paragraph++) {
div2paragraphs[paragraph].onmouseover = function(){
this.setAttribute('style', `background-color: $(colors[paragraph]`)
}
div2paragraphs[paragraph].onmouseout = function(){
this.setAttribute('style', 'background-color: white')
}
}
и почему первый (предоставленный ibrahim mahrir) работает, а второй нет?