Ваш код не имеет никакого смысла, потому что ничто не называется:
function fn($){
return function(){
innerFn = function(){
setTimeout(show, 1000);
};
show = function(){
$.alert("TEST");
}
}
}
Допустим, я звоню fn
проходя window
, то функция возвращается, что я могу казнены. Но поскольку эта функция содержит только объявление функции, вы также забываете var
, поэтому вы загрязняете глобальную область, это плохо - ничего не происходит.
Вы будете нуждаться по крайней мере один вызов функции внутри, как:
function fn($){
return function(){
var innerFn = function(){
setTimeout(show, 1000);
};
var show = function(){
$.alert("TEST");
}
innerFn();
}
}
fn(window)();
И что будет работы. Однако это определенно избыточно. У вас может быть только:
function fn($){
return function(){
function show(){
$.alert("TEST");
}
setTimeout(show, 1000);
}
}
Чтобы получить тот же результат. Однако, если вы цель, просто связали аргумент setTimeout, вы можете использовать bind. Вы можете использовать 3-й параметр setTimeout
, как указано в документации, но, похоже, not supported in IE for legacy reason.
Так, пример с bind
воли выглядит следующим образом:
function show() {
this.alert('test');
}
setTimeout(show.bind(window), 1000);
Обратите также внимание, что window
является глобальным объектом по умолчанию, поэтому, как правило, вы не должны делать это, просто alert
достаточно. Однако, я полагаю, это не ваш фактический код, а просто простой тест, как говорит строка предупреждения.
Если вы предпочитаете иметь window
в качестве первого параметра вместо этого, и вы не заинтересованы в объект контекста this
, вы можете сделать что-то вроде:
function show($) {
$.alert('test');
}
setTimeout(show.bind(null, window), 1000);
Когда и как 'fn' называется? (И как называется 'show'?) –
на загруженной странице, вызовите модуль fn.like yui. – MarioDu
'' 'должно быть доступно в' show', если оно определено при вызове 'fn'. –