3

So, the problem is that I have a function inside a function that needs to be called by setTimeout. That doesn't work however because setTimeout will assume that the function it calls has the root as its' scope.

Any idea how I could solve this without changing the scope of the function?

Edit:

Here is what I mean:

function general(){
 function saysomething(){
 console.log('hi there');
 }
setTimeout("saysomething();", 1000);
}

The setTimeout fails..

asked Nov 18, 2011 at 18:15
2
  • 1
    What? Provide example code or clarify what are you asking about. Commented Nov 18, 2011 at 18:20
  • First argument of setTimeout requires you to specify a function object, not string. Commented Nov 7, 2014 at 9:44

2 Answers 2

10
function general(){
 function saysomething(){
 console.log('hi there');
 }
 setTimeout(saysomething, 1000);
}
answered Nov 18, 2011 at 18:31

2 Comments

The scope chain of a JavaScript function is determined when the function is defined. By defining the callback function inside the body of general, you are ensuring that the callback function will be able to reference all the other variables defined inside of general, namely saysomething.
In other words, Ben is using a closure to save a reference to the saysomething function.
3

Not positive this is what you mean but you can pass the variables when you call the function in the setTimeout

function f1(){
 var a='1';
 var b='b';
 setTimeout(function(){f2(a,b);},1000)
}
function f2(a,b){
 alert(a + b);
}
f1();
answered Nov 18, 2011 at 18:18

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.