2011-11-18 57 views
1

所以,问题是我有一个函数内需要由setTimeout调用的函数。 但这并不奏效,因为setTimeout会假定它调用的函数具有作为其作用域的根。函数内setTimeout调用函数 - 范围 - 问题

任何想法如何解决这个问题,而不改变函数的范围?

编辑:

这里是我的意思是:

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

的setTimeout的失败..

+1

让我看看代码:) –

+1

什么?提供示例代码或澄清你在问什么。 – WTK

+0

setTimeout的第一个参数需要你指定一个函数对象,而不是字符串。 – iankit

回答

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

你能解释为什么这会起作用吗? – Julian

+0

JavaScript函数的作用域链在定义函数时确定。通过在'general'主体内部定义回调函数,您可以确保回调函数能够引用'general'中定义的所有其他变量,即'saysomething'。 – Ben

+1

换句话说,Ben使用闭包来保存对sayomething函数的引用。 – Bert

2

不积极,这是你的意思,但是当你调用该函数可以传递变量在setTimeout的

function f1(){ 
    var a='1'; 
    var b='b'; 
    setTimeout(function(){f2(a,b);},1000) 

} 

function f2(a,b){ 
     alert(a + b); 
} 

f1();