访问方法内部的变量's函数
Accessing a variable inside a method's function in JavaScript
我是JavaScript的新手,所以请原谅任何不正确的术语/理解。
我试图从方法ec.get
中的回调函数function(thebest,all)
中提取变量thebest
。
我已经读了一些关于作用域的内容,我希望下面的代码能起作用,但函数外的thebest
变量似乎与方法函数内的变量处于不同的作用域。
var thebest = 0;
ec.get("id", function(thebest,all) { });
alert(thebest);
我也尝试过在外部使用不同的变量名,但没有什么不同。如何从方法及其函数外部访问"最内部"thebest
变量的值?谢谢
这里似乎有几个问题:
问题1:如果要更改回调函数中theBest
的值,则不能通过将其作为参数传递来更改。简单变量是按值传递的,因此如果在函数中更改原始变量,则不会更改原始变量。
问题2:假设ec.get()
是一个网络操作,它可能是异步的,这意味着传递给它的回调函数要很久以后才能调用。这意味着,当您的警报触发时,完成回调函数还没有执行。所以,它还不会改变任何事情。
问题3:不能以声明回调的方式将参数传递给回调。这将定义这些参数,但除非ec.get()
将像那样传递参数,否则在调用时这些参数实际上不会存在。请记住,是ec.get()
在内部调用您的函数。它单独决定回调得到的参数。你无法改变这一点。
问题4:当您为函数声明一个与本地或全局变量同名的参数(在您的示例中为thebest
)时,您会创建一个名称冲突,导致该参数接管函数作用域的名称,并使更高级别的变量不可访问。通常,使用与作用域中的任何其他变量相同的名称来命名函数参数是个坏主意。它只是要求你或其他阅读你代码的人在使用这个名称时感到困惑,并对修改或阅读的内容做出错误的假设。
一种方法如下:
var thebest = 0;
var all = "whatever";
ec.get("id", function() {
// use the arguments "thebest" and "all" here which are available
// from the higher scope. They don't need to be passed in
alert(thebest);
alert(all);
});
// you can't alert on the value of thebest and all here because
// an asychronous callback won't have yet been called and
// won't have yet modified those values
如果回调是快速执行的(而不是异步的),那么您可以简单地将其分配给一个不同名称的变量。例如
var theBest = 0;
ec.get("id", function(theBestArg,all) { theBest = theBestArg; });
alert(thebest);
您的问题是将theBest
重新定义为函数的参数。
var thebest = 0;
ec.get("id", function(theNewBest,all) { theBest = 'new value' });
alert(thebest);
- 访问嵌套函数结构中的JavaScript父函数变量
- Javascript函数变量传递语法问题
- JavaScript 函数变量范围问题
- 在 promise 中获取构造函数变量
- 将函数结果传递给Javascript中的另一个函数变量
- 用对象设置函数变量's值
- Javascript函数变量应生成错误,而不是未定义的错误
- 我可以访问用户脚本中的匿名函数变量吗?
- 在实例化期间使用构造函数变量
- 为什么在 JavaScript 中不能用函数变量覆盖字符串变量
- JavaScript 允许调用函数访问调用函数变量
- 如何在嵌套原型中访问 JavaScript 构造函数变量
- 对函数变量的 JavaScript 控制台日志输出感到困惑
- 如何将函数变量传递给主干模型上的 jQuery 事件
- 如何访问构造函数变量
- 实例函数变量不会更改
- 为什么函数变量在变量之后是未定义的
- 用内部函数变量更改外部函数变量?Javascript
- Javascript - 使用闭包递增静态函数变量模拟
- 异步 JavaScript 静态函数变量