我能';不要在Javascript中使用我的函数

我能';不要在Javascript中使用我的函数,javascript,jquery,Javascript,Jquery,我的函数change\u slide()出错。 ReferenceError:change\u幻灯片未在第24:1行定义。 我的代码在这里: $(document).ready(function() { function change_slide() { number = pclass.charAt(6); number = parseInt(number); if (number == 5) number = 1; e

我的函数change\u slide()出错。
ReferenceError:change\u幻灯片未在第24:1行定义
。 我的代码在这里:

$(document).ready(function() {

    function change_slide() {
        number = pclass.charAt(6);
        number = parseInt(number);

        if (number == 5) number = 1;
        else number++;

        $('.picks').removeClass(pclass);
        pclass = 'bgpick' + number;
        $('.picks').addClass(pclass);
    }

    var random = Math.floor((Math.random() * 5) + 1);
    var pclass = 'bgpick' + random;
    var number;
    $('.picks').addClass(pclass);
    setInterval('change_slide()', 3000);
    $('.next').on('click', function() {
        change_slide();
    });
});

单击即可更改幻灯片()。下一步起作用,在setInterval中不起作用。

将函数声明从
文档准备函数中取出

改变

setInterval('change_slide()', 3000);

setInterval(change_slide, 3000);
这是修改后的代码

$(document).ready(function() {
  var random = Math.floor((Math.random() * 5) + 1);
  var pclass = 'bgpick' + random;
  var number;
  $('.picks').addClass(pclass);
  setInterval(change_slide, 3000);
  $('.next').on('click', function() {
    change_slide();
  });
});
function change_slide() {
  number = pclass.charAt(6);
  number = parseInt(number);

  if (number == 5) number = 1;
  else number++;

  $('.picks').removeClass(pclass);
  pclass = 'bgpick' + number;
  $('.picks').addClass(pclass);
}

将功能声明从
文档准备功能中取出

改变

setInterval('change_slide()', 3000);

setInterval(change_slide, 3000);
这是修改后的代码

$(document).ready(function() {
  var random = Math.floor((Math.random() * 5) + 1);
  var pclass = 'bgpick' + random;
  var number;
  $('.picks').addClass(pclass);
  setInterval(change_slide, 3000);
  $('.next').on('click', function() {
    change_slide();
  });
});
function change_slide() {
  number = pclass.charAt(6);
  number = parseInt(number);

  if (number == 5) number = 1;
  else number++;

  $('.picks').removeClass(pclass);
  pclass = 'bgpick' + number;
  $('.picks').addClass(pclass);
}

当您将字符串参数用于
setInterval
时,Javascript代码将在全局环境中执行。您应该传递函数引用而不是字符串,然后在本地环境中对其求值

setInterval(change_slide, 3000);

请注意,您不应在此处的
change\u幻灯片
后面加括号。这将立即调用该函数,而不是传递对该函数的引用。

当您将字符串参数用于
setInterval
时,Javascript代码将在全局环境中执行。您应该传递函数引用而不是字符串,然后在本地环境中对其求值

setInterval(change_slide, 3000);


请注意,您不应在此处的
change\u幻灯片
后面加括号。这将立即调用函数,而不是传递对函数的引用。

将函数声明置于
.ready()
之外。是否尝试将change\u slide的定义移到$(document)之外。ready(..)我认为setInterval接受函数,而不是函数名。尝试将其更改为
setInterval(更改幻灯片,3000)
将其更改为
setInterval(更改幻灯片,3000)
即可。但问题是,当您向setInterval传递一个字符串时,它会在全局范围内对字符串调用
eval
,而
change\u slide
仅在
文档中定义。ready
@dannybouonocore-Hmm,从来都不知道这一点。谢谢。将函数声明置于
.ready()
之外。是否尝试将change\u slide的定义移到$(document)之外。ready(..)我认为setInterval是函数,而不是函数名。尝试将其更改为
setInterval(更改幻灯片,3000)
将其更改为
setInterval(更改幻灯片,3000)
即可。但问题是,当您向setInterval传递一个字符串时,它会在全局范围内对字符串调用
eval
,而
change\u slide
仅在
文档中定义。ready
@dannybouonocore-Hmm,从来都不知道这一点。谢谢。第一句是正确答案。不需要回答此问题的其余部分。不需要,将函数从
ready
中取出将创建一个全局函数。不要落入这个陷阱。解决方案是不使用字符串,这样它就不会绑定到全局范围。请纠正愚蠢的地方——第二段代码被破坏了。支持这一点并不重要wise@Vld例如我有点瞎了。我看不出这是祈祷。apologies@JonathanM第一句话解决了这个问题,但这是一个坏习惯。第一句话是正确答案。不需要回答此问题的其余部分。不需要,将函数从
ready
中取出将创建一个全局函数。不要落入这个陷阱。解决方案是不使用字符串,这样它就不会绑定到全局范围。请纠正愚蠢的地方——第二段代码被破坏了。支持这一点并不重要wise@Vld例如我有点瞎了。我看不出这是祈祷。apologies@JonathanM第一句话解决了这个问题,但这是一个坏习惯。这应该是第一句的公认答案。这应该是第一句的公认答案。