在函数内调用setTimeout函数-作用域问题

3

问题是我有一个函数嵌套在另一个函数内,需要通过setTimeout调用。然而,这样做是不行的,因为setTimeout会将其调用的函数的作用域视为根作用域。

你有任何想法怎么解决这个问题,而不改变函数的作用域吗?

编辑:

这里是我的意思:

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

setTimeout 失败了...


1
什么?请提供示例代码或澄清您所询问的内容。 - WTK
setTimeout的第一个参数需要你指定一个函数对象,而不是字符串。 - iankit
2个回答

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

JavaScript函数的作用域链是在定义函数时确定的。通过在general函数体内定义回调函数,您确保回调函数能够引用general内定义的所有其他变量,即saysomething - Ben
1
换句话说,Ben正在使用闭包来保存对saysomething函数的引用。 - Bert

3
我不确定您的意思,但是当您在setTimeout中调用函数时,可以传递变量。
function f1(){
    var a='1';
    var b='b';
    setTimeout(function(){f2(a,b);},1000)

}

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

f1();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接