繁体   English   中英

在JavaScript中访问方法函数内的变量

[英]Accessing a variable inside a method's function in JavaScript

我是JavaScript的新手,因此请原谅任何错误的术语/理解。

我试图提取变量thebest从一个回调函数function(thebest,all)的方法中ec.get

我已经对范围进行了一些阅读,并且希望下面的代码能够正常工作,但是似乎函数外的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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM