Javascript:尝试访问函数之外的变量'undefined'

时间:2016-01-05 23:47:31

标签: javascript

我试图通过返回time_pressed并在函数外部执行function held()来访问time_pressed之外的console.log(held())变量。它是console.log - undefined。为什么它不起作用?如何在函数外部访问所述变量?我需要做什么?

以下是我的代码..

function held(){
    var time_pressed;
    document.onmousedown = function(e){
        mousedown_time = getTime();
        console.log(mousedown_time);
    }
    document.onmouseup = function(e){
        time_pressed = getTime() - mousedown_time;
        console.log('You held your mouse down for', time_pressed,'miliseconds.');
    }
    return time_pressed
}
console.log(held())

2 个答案:

答案 0 :(得分:2)

考虑以下功能:

function held(){
    var time_pressed;
    return time_pressed;
}
console.log(held());

您希望函数返回什么?没有定义任何值,因此值为undefined

您在该函数中唯一要做的事情是将事件处理函数分配给文档。这意味着两件事:

  1. 这些是单独的功能,他们返回的内容不是返回的内容。
  2. 直到以后甚至发生时,才会执行这些功能。
  3. 您已成功创建这些事件处理程序。所以不清楚为什么你试图记录一些返回值。您正在执行的功能不返回任何内容,也不需要返回。没有什么可以记录的。当他们执行时,事件处理程序将登录到控制台。

答案 1 :(得分:1)

因此,held()只是在代码中设置处理程序。在处理程序触发填充之前,您的time_pressed变量不会保留任何内容。试一试:

function held(){
    var time_pressed;
    var mousedown_time;
    document.onmousedown = function(e){
        mousedown_time = getTime();
        console.log(mousedown_time);
    }
    document.onmouseup = function(e){
        time_pressed = getTime() - mousedown_time;
        console.log('You held your mouse down for', time_pressed,'miliseconds.');
    }
}
held();

编辑:为了完整起见,需要定义getTime()。我跟着去了:

function getTime(){ return new Date().getTime(); }