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
-
1What? Provide example code or clarify what are you asking about.WTK– WTK2011年11月18日 18:20:28 +00:00Commented Nov 18, 2011 at 18:20
-
First argument of setTimeout requires you to specify a function object, not string.iankit– iankit2014年11月07日 09:44:21 +00:00Commented Nov 7, 2014 at 9:44
2 Answers 2
function general(){
function saysomething(){
console.log('hi there');
}
setTimeout(saysomething, 1000);
}
answered Nov 18, 2011 at 18:31
2 Comments
Ben
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
.Bert
In other words, Ben is using a closure to save a reference to the saysomething function.
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
lang-js