frr*_*lod 0 javascript variables timeout
我很想了解之间的区别:
var the_timeout = setTimeout("alert(the_string);", 60000);
Run Code Online (Sandbox Code Playgroud)
和:
var the_timeout = setTimeout("alert(" + the_string + ");",60000);
Run Code Online (Sandbox Code Playgroud)
我知道第一个传递变量,第二个传递值 - 但这究竟是什么意思,为什么重要?为什么在第二个例子中传递了值?
另外(我希望这是同一个主题),为什么这个工作:
var timeout=setTimeout("someFunction();", 3000)
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
var timeout=setTimeout(someFunction(),3000);
Run Code Online (Sandbox Code Playgroud)
调用函数时,someFunction()工作,所以为什么我在使用时必须添加引号setTimeout()?
我认为你混淆了传值和传递参考之间的区别.在你提到的例子中,没有区别.
然而,
var timeout=setTimeout("someFunction();", 3000)
Run Code Online (Sandbox Code Playgroud)
工作和:
var timeout=setTimeout(someFunction(),3000);
Run Code Online (Sandbox Code Playgroud)
不是因为在第二种情况下,someFunction()会运行,以便它可以传递结果/返回值setTimeout.这就是为什么你把它作为一个字符串传递给它,以便它setTimeout可以eval自己.当然,除非someFunction()它本身返回一个setTimeout可以用作回调的函数.
但是,正如评论中指出的zerkms,你应该传递回调:
var timeout = setTimeout(function() { someFunction(); }, 3000);
Run Code Online (Sandbox Code Playgroud)
这也具有setTimeout可以随时调用回调的效果.一个主要的好处是你可以传递任何常规函数,这样你就可以从你可能使用的编辑器中受益,而不是将它全部打包成一个字符串:
var myTrigger = function() {
someFunction();
};
var timeout = setTimeout(myTrigger, 3000);
Run Code Online (Sandbox Code Playgroud)