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共享一些作用域名称定义,即使您有任何链接,也请与我们共享。请包含更多信息,不要将其作为答案发布