Для тех, кто перенаправлен сюда вопросом , почему передача функции лучше, чем передача строки .
1: передача строки запускает компилятор
Каждый раз, когда вам нужно оценить строку, вы запускаете полный компилятор.Для каждого вызова, где это необходимо.
Мало того, что это медленно, это разрушает все ускорения JIT и браузера, которые сделаны.
2: Передача строкиНАМНОГО более ограничено.
Поскольку строка запускается через компилятор, она не так четко связана с локальной областью видимости и переменными.
Хотя это не заметно в ситуациинапример:
window.setInterval("doThing()");
В более сложной ситуации код выглядит чище:
window.setInterval("doThing(" + val1 + "," + val2 + ")");
против
window.setInterval(function() {
// You can put a debugging point here
dothing(val1, val2);
});
3: объекты DOM могутне могут передаваться через строку
Как уже упоминал Альваро, объекты DOM не могут быть переданы с помощью строкового метода.
// There is no way to do this via a string.
var el = document.getElementById("my-element");
window.setInterval(function() {
dothing(el);
});
(Другие объекты могут или не могут быть пройдены -в зависимости от того, можно ли их сериализовать, но в целом это будет довольно сложно.)