Javascript:回调中的变量范围

标签 javascript callback scope

我正在尝试在调用 callbackfunction 中重新使用 variable,但它并不像我想的那样工作它应该;

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);
  }
}

我无法理解这是否是与闭包相关的问题,但起初我预计 callingfn 中的 someval 会被定义。

我哪里错了?

最佳答案

函数 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 声明为全局范围,目前它在一个使其成为本地的函数中。

希望这对您有所帮助。

关于Javascript:回调中的变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29540471/

相关文章:

c# - 如何估计方法执行时间?

javascript - Electron :X不是函数>>>(使用ipcrenderer/ipcmain进行回调)

javascript - jQuery AJAX 回调方法无法访问另一个插件方法

java - 解决组件问题 - 范围

c++ - 全局范围内的 typedef 模板

javascript - JSON字符串删除字符

javascript - 有没有办法找到最接近的非标签且没有类的元素

javascript - 如何制作在表为空时隐藏表的 jquery 脚本?

javascript - 表单不接受表单中的所有输入行(输入名称丢失(

ruby-on-rails-3 - Rails ActiveRecord 作用域是另一个作用域的 "opposite",或者是用户, "lack"是一个属性