Javascript:回调中的变量范围

时间:2015-04-09 13:52:25

标签: javascript callback scope

我正在尝试在调用variable的{​​{1}}内重复使用function,但它不会按照我认为应该的方式运行;

callback

我无法理解这是否与闭包相关的问题,但起初我预计another()(); //=> logs "somevalue" callingfn(); //=> logs " someval is not defined" function a(fn){ var someval = "some-value"; return fn(); } function callingfn(){ return a.call(this, function(){ console.log(someval) }) } function another(){ var sv = "somevalue"; return function(){ console.log(sv); } } 中的someval将被定义。

我哪里错了?

3 个答案:

答案 0 :(得分:6)

函数fn()a()不同,但它接收fn作为参数。

您可以将someval作为参数发送。

another()(); //=> logs "somevalue"
callingfn(); //=> logs " someval is not defined"

function a(fn){
  var someval = "some-value";
  return fn(someval);
} 

function callingfn(){
 return a.call(this, function(someval){
   console.log(someval)
  })
}

function another(){
  var sv = "somevalue";
  return function(){
    console.log(sv);
  }
}

或者简单地将var someval声明为全局范围,目前它位于使其成为本地的函数内。

希望这有帮助。

答案 1 :(得分:1)

试试这个:

another()(); //=> logs "somevalue"
callingfn(); //=> logs " someval is not defined"
var someval;
var sv;

function a(fn){
  someval = "some-value";
  return fn();
} 

function callingfn(){
 return a.call(this, function(){
   console.log(someval)
  })
}

function another(){
 sv = "somevalue";
  return function(){
    console.log(sv);
  }
}

答案 2 :(得分:1)

在函数范围之外定义someval

var someval; // <- outside of the scope of any one function
another()(); //=> logs "somevalue"
callingfn(); //=> logs " someval is not defined"

function a(fn){
  someval = "some-value"; // <-remove "var" to access the variable outside the scope
  return fn();
} 

function callingfn(){
 return a.call(this, function(){
   console.log(someval)
  })
}

function another(){
  var sv = "somevalue";
  return function(){
    console.log(sv);
  }
}