2013-10-07 5 views
0

См. Ниже javascript. Когда функции транслируются таким образом, как они могут работать, не будучи вызванными конкретно. Я имею в виду, что приведенная ниже функция работает без вызова, и я не понимаю, как это сделать.javascript, странное расположение функций, не понимаю

(j, function() { 
alert(1); 
}) 

это Эвальд так:

eval(s)(j, function() { catch (_) { } } 
+6

Это не должно запустить функцию. Можете ли вы показать больше контекста? – Barmar

+1

Это делает ** не ** запускает функцию, образец: http://jsfiddle.net/PeAmw/ – ComFreek

+0

Его часть большей части кода, где я не знаю, что такое J. Есть ли J, который может каким-то образом инициализировать эту функцию? – OBV

ответ

11

Похоже, те аргументы вызова функции, т.е.

foo(j, function() { 
    alert(1); 
}) 

Это будет передавать текущее значение j как первый аргумент, и функция, указанная там как второй аргумент.

Сказанное означает, что для этой функции, которая оповещает 1-называться, foo придется вручную ее называть. Что-то вдоль линий

function foo(j, f){ 
    f(); 
} 

EDIT

Таким образом, в соответствии с вашим вопросом редактирования, похоже, что выше, более менее правильно, только вместо ссылки на функцию непосредственно, вы выборки это из утверждения eval.

Что-то вроде этого:

function foo(j, f){ 
    f(); 
} 
var s = "foo"; 
var j = 0; 
eval(s)(j, function() { 
    alert(1); 
}) 

Вот рабочий FIDDLE

+0

Комментарий Pls whoever downvoted – mplungjan

+6

@mplungjan: I Персонализированный. что это 1 из 7 (15%) Я полагаю, что это были налоги. – zerkms

+0

@mplungjan - в то время как комментарий всегда приветствуется, когда есть проблема с ответом, тот, кто ниспроверг, не обязан это делать. –

Смежные вопросы