Javascript调用函数外的无效结果?没有定义?

Javascript调用函数外的无效结果?没有定义?,javascript,function,variables,Javascript,Function,Variables,我有以下代码 var myDatepicker = $('#datumpak').datepicker({ onSelect: function (formattedDate, date, inst) { if (date.length == 2) { Jaar = ("0" + date[0].getFullYear()).slice(-4); Maand = ("0" + (date[0].getMonth()+1)).slice(-2);

我有以下代码

var myDatepicker = $('#datumpak').datepicker({
onSelect: function (formattedDate, date, inst) {
    if (date.length == 2) {
        Jaar = ("0" + date[0].getFullYear()).slice(-4);
        Maand = ("0" + (date[0].getMonth()+1)).slice(-2); 
        Dag = ("0" + date[0].getDate()).slice(-2);
        Uren = ("0" + date[0].getHours()).slice(-2); 
        Minuut = ("0" + date[0].getMinutes()).slice(-2); 
        Seconden = ("0" + date[0].getSeconds()).slice(-2);  
        var totaaldatea = (Jaar) + (Maand) + (Dag) + (Uren) + (Minuut) + (Seconden);

        Jaar1 = ("0" + date[1].getFullYear()).slice(-4);
        Maand1 = ("0" + (date[1].getMonth()+1)).slice(-2); 
        Dag1 = ("0" + date[1].getDate()).slice(-2);
        Uren1 = ("0" + date[1].getHours()).slice(-2); 
        Minuut1 = ("0" + date[1].getMinutes()).slice(-2); 
        Seconden1 = ("0" + date[1].getSeconds()).slice(-2);  
        var totaaldateb = (Jaar1) + (Maand1) + (Dag1) + (Uren1) + (Minuut1) + (Seconden1);
        }
    }}).data('datepicker');
// Console.log(totaaldatea) NOT WORKING!?

为什么我不能调用函数外的变量,我需要如何解决这个问题?请帮助。

您的变量超出范围。您应该定义变量,然后对其进行更改:

var totaaldatea;  // Declare the variables outside the function.
var totaaldateb;

var myDatepicker = $('#datumpak').datepicker({
onSelect: function (formattedDate, date, inst) {
    if (date.length == 2) {
        var Jaar = ("0" + date[0].getFullYear()).slice(-4);
        var Maand = ("0" + (date[0].getMonth()+1)).slice(-2); 
        var Dag = ("0" + date[0].getDate()).slice(-2);
        var Uren = ("0" + date[0].getHours()).slice(-2); 
        var Minuut = ("0" + date[0].getMinutes()).slice(-2); 
        var Seconden = ("0" + date[0].getSeconds()).slice(-2);  
        totaaldatea = (Jaar) + (Maand) + (Dag) + (Uren) + (Minuut) + (Seconden); // change it inside

        var Jaar1 = ("0" + date[1].getFullYear()).slice(-4);
        var Maand1 = ("0" + (date[1].getMonth()+1)).slice(-2); 
        var Dag1 = ("0" + date[1].getDate()).slice(-2);
        var Uren1 = ("0" + date[1].getHours()).slice(-2); 
        var Minuut1 = ("0" + date[1].getMinutes()).slice(-2); 
        var Seconden1 = ("0" + date[1].getSeconds()).slice(-2);  
        totaaldateb = (Jaar1) + (Maand1) + (Dag1) + (Uren1) + (Minuut1) + (Seconden1); // change it inside
        }
    }}).data('datepicker');
// Console.log(totaaldatea)
如果没有在函数外部使用变量,只需在函数内部记录值,如:

var myDatepicker = $('#datumpak').datepicker({
  onSelect: function (formattedDate, date, inst) {
    if (date.length == 2) {
      var Jaar = ("0" + date[0].getFullYear()).slice(-4);
      var Maand = ("0" + (date[0].getMonth()+1)).slice(-2); 
      var Dag = ("0" + date[0].getDate()).slice(-2);
      var Uren = ("0" + date[0].getHours()).slice(-2); 
      var Minuut = ("0" + date[0].getMinutes()).slice(-2); 
      var Seconden = ("0" + date[0].getSeconds()).slice(-2);  
      var totaaldatea = (Jaar) + (Maand) + (Dag) + (Uren) + (Minuut) + (Seconden);
      console.log(totaaldatea)

      var Jaar1 = ("0" + date[1].getFullYear()).slice(-4);
      var Maand1 = ("0" + (date[1].getMonth()+1)).slice(-2); 
      var Dag1 = ("0" + date[1].getDate()).slice(-2);
      var Uren1 = ("0" + date[1].getHours()).slice(-2); 
      var Minuut1 = ("0" + date[1].getMinutes()).slice(-2); 
      var Seconden1 = ("0" + date[1].getSeconds()).slice(-2);  
      var totaaldateb = (Jaar1) + (Maand1) + (Dag1) + (Uren1) + (Minuut1) + (Seconden1);
      console.log(totaaldateb)
    }
  }
}).data('datepicker');

JavaScript有两个作用域——全局和局部。在函数外部声明的任何变量都属于全局范围,因此可以从代码中的任何位置访问。每个函数都有自己的作用域,在该函数中声明的任何变量都只能从该函数和任何嵌套函数中访问

您的变量totaaldatea具有局部作用域,但您在全局作用域中调用它,因为它会给出错误消息

var postData;
    function showroute() {
        voertuiglijstsource.clear();
        var postData = {
            url: 'http://localhost:8080/geoserver/Easytrack/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=Easytrack%3AFilter_compleet&outputFormat=application%2Fjson&viewparams=code:' + $('#selectvoertuig').val().replace(' ', '%20') // + outcome totaldatea and totaldateb
        };    
            console.log(postData); 
        $.ajax({
            url: 'php/geoproxycurl.php',
            dataType: 'json',
            data: postData,
            method: 'post'
        }).done(function (data) {
            voertuiglijstsource.addFeatures(new ol.format.GeoJSON().readFeatures(data, {
                dataProjection: 'EPSG:4326',
                featureProjection: 'EPSG:3857'
            }));
        });
    }

主要是因为您试图在任何人在datepicker中选择日期之前将其记录下来,还因为该变量声明为onSelect函数的本地变量。为什么不将console.log移到函数中?我建议您阅读javascript作用域。@Bergi,因为我需要将变量的结果移到另一个函数中,而这个函数不需要onclick。@TimvanHeteren请显示另一个函数及其调用位置/方式,那么,别忘了totaldataa tooThanks——没意识到他们是不同的Var!不要忘记声明所有这些变量。这怎么可能@AndyMardell?在运行填充变量的函数之前,您可能正在记录该变量。我已经更新了我的答案——因为听起来你不需要全局变量。大概Idk@bergi共享一些作用域名称定义,即使您有任何链接,也请与我们共享。请包含更多信息,不要将其作为答案发布