【问题标题】:Javascript call vairable outcome outside function? Not defined?Javascript在函数外调用变量结果?没有定义的?
【发布时间】:2020-04-27 01:07:20
【问题描述】:

我有以下代码。

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 被声明为 onSelect 函数的本地函数。为什么不直接在函数内移动console.log
  • 我建议阅读有关 javascript 范围的信息。
  • @Bergi,因为我需要将变量的结果转换为另一个函数,而不需要 onclick 的东西。
  • @TimvanHeteren 请说明其他函数以及调用它的位置/方式。

标签: javascript function variables


【解决方案1】:

您的变量超出范围。你应该定义变量,然后改变它:

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');

【讨论】:

  • 别忘了totaldataa
  • 谢谢 - 没有意识到它们是不同的变量!
  • 别忘了声明所有这些变量。
  • 这怎么可能@AndyMardell?
  • 您可能在运行填充它的函数之前记录了该变量。我已经更新了我的答案 - 因为听起来你不需要变量是全局的。可能是。身份证
【解决方案2】:

@伯吉

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'
            }));
        });
    }

【讨论】:

【解决方案3】:

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

您的变量 totaaldatea 具有本地范围,但您在全局范围内调用它 - 因此它会给出 错误 消息

【讨论】:

  • @bergi 分享一些范围名称定义,即使您有任何链接,也请与我们分享。
猜你喜欢
  • 2023-03-24
  • 2022-11-22
  • 1970-01-01
  • 2022-11-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多