Как я могу передать аргумент функции, вызываемой с помощью setTimeout?

Я хочу передать аргумент функции, вызываемой с помощью setTimeout. Я нашел эти три варианта:

A = 1;
// Method 1: closure things
setTimeout(function() { whatsA(A); }, 100);
// Method 2: third argument (same result with [A])
setTimeout(whatsA, 100, A);
// Method 3: eval
setTimeout('whatsA(' + A + ')', 100);
A = 2;
function whatsA(X) { console.log(X); }

Это показывает 2, undefinedи 1в Internet Explorer 9.

Метод 1: Понятно, что мне бы не хотелось, чтобы аргумент менялся после его передачи (конечно, в случае простых целых чисел).

Метод 2: Это было бы идеально, если бы его поддерживал только Internet Explorer.

Метод 3: Это, кажется, единственный выбор. Но он кажется менее красивым, чем другие, поскольку передает что-то для оценки, а не функцию.

Есть ли лучший способ?

6
задан ehird 13 May 2012 в 15:05
поделиться