setTimeout使用问题

时间:2009-10-21 03:48:00

标签: javascript

我有以下javascript,但我在使用setTimeout时遇到问题,即:

function setUrl()
{
  // Get system URL details
  var url_path = new String(window.location.pathname);

  var new_url;

  new_url = window.location.host;
  }
  setTimeout("setValue('ONE_UP_URL',new_url);",2000);
}

但由于某种原因,我收到错误:'new_url'未定义。

非常感谢您使用setTimeout调用此javascript函数的帮助。

感谢。

3 个答案:

答案 0 :(得分:7)

不要使用字符串作为setTimeout函数调用的第一个参数,使用匿名函数。

你还有一个额外的大括号:

function setUrl() {
  // Get system URL details
  var url_path = window.location.pathname,
      new_url = window.location.host;

  setTimeout(function () {
    setValue('ONE_UP_URL',new_url);
  }, 2000);
}

如果你使用一个字符串,它将被评估,而不是recommended

使用eval(及其亲属,FunctionsetTimeoutsetInterval)评估代码被认为是危险的,因为它们会执行您传递的代码调用者的权限,几乎所有时候都有一个解决方法来避免它们。

其他小事:

  • 您的代码中对String构造函数的调用是多余的,因为window.location.pathname已经是一个字符串。
  • 您可以在single var声明中声明您的函数变量。

答案 1 :(得分:6)

你有一个流氓闭合支撑。要么缺少更多代码,要么只需删除它。 (setTimeout上面的行。)

另外,你应该替换它:

setTimeout("setValue('ONE_UP_URL',new_url);",2000);

用这个:

setTimeout(function() { setValue('ONE_UP_URL', new_url); }, 2000);

答案 2 :(得分:1)

尝试将其更新为:

function setValue( s, variable ) {
    alert( s );
    alert( variable );
}

function setUrl()
{
  // Get system URL details
  var url_path = window.location.pathname, 
      new_url = window.location.host;

  setTimeout(
    function() {
        setValue('ONE_UP_URL',new_url);
    }, 2000 );
}