Właśnie opracowałam mały kod do stworzenia stołu 24x60. Chcę drukować identyfikator każdego <td>
na mouseover
:Efektywność tworzenia obsługi zdarzeń w zagnieżdżonej pętli: czy w tym miejscu tworzę 1440 funkcji?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
table {
background-color:blue;
}
td {
width: 2px;
height: 2px;
background-color:red;
}
</style>
</head>
<body>
<table id="time-table"></table>
<script type="text/javascript">
var table = document.getElementById("time-table");
for (var r = 0; r < 24; r++) {
var row = document.createElement("tr");
for (var c = 0; c < 60; c++) {
var td = document.createElement("td");
td.id = "td-" + r + "-" + c;
td.onmouseover = function (e) {
console.log(this.id);
}
row.appendChild(td);
}
table.appendChild(row);
}
</script>
</body>
</html>
Kod działa, ale teraz jestem zaniepokojony, jeśli jest zoptymalizowana? Czy tworzę funkcje obsługi zdarzeń 1440 w zagnieżdżonych pętlach? Czy też interpreter JavaScript jest wystarczająco inteligentny, aby utworzyć tylko jedną funkcję i przypisać ją do elementów 1440 <td>
?
Aby mieć 100% pewności, że wykonujesz tylko jedną funkcję, możesz ją zadeklarować poza pętlą. –
Który tłumacz? Jaka wersja? Za każdym razem, gdy spytasz, czy JavaScript jest wystarczająco inteligentny, zwykle nie ma odpowiedzi. – Joe
Nie wiem, czy to powoduje nową funkcję dla każdego, ale jeśli zdefiniować funkcję, a następnie po prostu przypisać, że zamiast korzystania z funkcji anonimowej, powinieneś mieć odniesienia do tej samej funkcji. – JerseyMike