传递变量VS传递值

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()?

Jor*_*eña 5

我认为你混淆了传值和传递参考之间的区别.在你提到的例子中,没有区别.

然而,

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)