在javascript中访问函数内部的变量?

在javascript中访问函数内部的变量?,javascript,function,variables,return,return-value,Javascript,Function,Variables,Return,Return Value,如何访问javascript中函数内部的变量 var a; var surveyObjects = Parse.Object.extend(surveyObject); var query= new Parse.Query(surveyObjects); query.count({ success: function(count){a = count;}, error: function(error){} }); alert("count of function "+a); a

如何访问javascript中函数内部的变量

var a;
var surveyObjects = Parse.Object.extend(surveyObject);
var query= new Parse.Query(surveyObjects);
query.count({
    success: function(count){a = count;},
    error: function(error){}
});
alert("count of function "+a);
a
显示
未定义的值。我需要在外部使用
a
的值。

喜欢它:

function one() {
    this.two = function () {
        var a = 10;
        return a;
    }
}

var o = new one();
alert(o.two());

由于javascript和大多数语言都是作用域变量,所以不能从函数外部访问函数内部声明的变量。变量只属于函数的作用域,不属于全局作用域

幸运的是,函数继承调用方的作用域。因此,从函数外部访问变量的最简单方法是首先在函数外部声明,然后在函数内部使用它

function one(){
   var a;

   function two(){
       a = 10;
       return a;
   }

   return a;
}
请注意,您应该非常小心如何确定变量的范围。函数的全部要点是封装和隔离功能

对于承诺,您可以在承诺之外声明一个变量,然后将其值设置为success

var a;

Parse.doSomething().then(function(data) {
    a = data;
});
编辑:根据您在评论中显示的内容,您遇到了异步问题。承诺是异步的,这意味着它们不会在代码中按顺序运行。这就是为什么存在
success
error
回调,在承诺解决后调用。您的
警报(a)
在promise回调之外,因此它会立即运行,而无需等待解析承诺解析,因此
a
仍然未定义。如果您将
警报(a)
放在promise回调中,则
a
将在该点设置

var a;
query.count({
    success: function(count) {
        a = count;
        alert(a);
        return a;
    },
    error: function(err) {}
});

您可以通过使用隐式全局变量行为来实现这一点

函数一(){
函数二(){
a=10;
}
二();
}
一个();
控制台日志(a)谢谢。
我将变量声明为全局变量并在内部函数中插入值,然后在函数中进行函数调用以触发调用该值的另一个函数

var a=0;
var surveyObjects = Parse.Object.extend(surveyObject);
var query= new Parse.Query(surveyObjects);
query.count({
    success: function(count) {a =count; total();},
    error:function(error){}
});

function total(){alert (a);}

使用return语句全局访问变量

function(){
var k=1;//local
return k;//global
}
result=k+10;//sample

除非修改代码,否则不能。您拥有的代码毫无意义。请在外部作用域/全局作用域中声明变量。这实际上与提升无关。提升机制只确保首先处理声明,因此如果应用程序第10行有
var a
,则可以在第4行使用它,而不会出现
ReferenceError
。但是,提升并没有使变量移动作用域。谢谢大家。但问题是我正在使用解析和承诺,所以它将是函数一(){query.count({success:function(count){c=count;},error:function(error){}};}alert(c);我需要在这里得到c的值。你们应该在你们的问题中清楚地表明你们在使用解析。您可以使用与我的答案中描述的相同的方式访问承诺处理程序函数中的变量。此外,解析服务已弃用,并将在几个月后关闭。是的,我们使用解析开源服务器。那么有没有办法从success函数中获取外部值呢?我已经更新了我的答案,加入了一个人为的例子,在承诺之外设置变量。你真的应该用一个更接近你实际问题的例子来更新你的问题,但它仍然显示出未定义的问题。var a;count({success:function(count){a=count;返回a;},error:function(err){});警报(a);谢谢大家。但问题是我正在使用解析和承诺,所以它应该是函数一(){query.count({success:function(count){c=count;},error:function(error){};}alert(c);我需要得到c的值。
function(){
var k=1;//local
return k;//global
}
result=k+10;//sample