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

Sya*_* Ps 4 javascript variables return function 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);
Run Code Online (Sandbox Code Playgroud)

a显示出undefined价值.我需要使用a外部的值.

Sov*_*iut 6

由于 javascript 和大多数语言的作用域变量,您无法从函数外部访问在函数内部声明的变量。变量只属于函数的作用域,不属于全局作用域。

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

function one(){
   var a;

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

   return a;
}
Run Code Online (Sandbox Code Playgroud)

请注意,您应该非常小心地确定变量的范围。函数的全部意义在于封装和隔离功能。

在 promise 的情况下,您可以在 promise 之外声明一个变量,然后在成功时设置其值。

var a;

Parse.doSomething().then(function(data) {
    a = data;
});
Run Code Online (Sandbox Code Playgroud)

编辑:根据您在评论中显示的内容,您遇到了异步问题。Promise 是异步的,这意味着它们不会在您的代码中按顺序运行。这就是successerror回调存在的原因,一旦承诺解决就被调用。您alert(a)在承诺回调之外,因此它立即运行,而无需等待解析承诺解决,因此a仍未定义。如果你把alert(a)里面的promise回调,a那点就已经设置好了。

var a;
query.count({
    success: function(count) {
        a = count;
        alert(a);
        return a;
    },
    error: function(err) {}
});
Run Code Online (Sandbox Code Playgroud)


小智 6

//  You can simply do it by 
function test()
{
    this.name='xyz';
}
var obj = new test();

console.log(obj.name);
Run Code Online (Sandbox Code Playgroud)


Tal*_*l87 5

您可以使用隐式全局变量行为来完成此操作.

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

one();
console.log(a);
Run Code Online (Sandbox Code Playgroud)

如果你没有在javascript IE中声明一个不使用var关键字的变量,那么它就变成了一个全局变量.

进一步阅读:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/var#Implicit_globals_and_outer_function_scope


Sya*_* Ps 0

谢谢。我将变量声明为全局变量并在内部函数中插入值,然后在函数内部进行函数调用以触发调用该值的另一​​个函数。

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);}
Run Code Online (Sandbox Code Playgroud)