访问方法内部的变量';JavaScript中的s函数
我是JavaScript的新手,因此请原谅任何不正确的术语/理解 我试图在方法访问方法内部的变量';JavaScript中的s函数,javascript,scope,Javascript,Scope,我是JavaScript的新手,因此请原谅任何不正确的术语/理解 我试图在方法ec.get中从回调函数function(thebest,all)中提取变量thebest 我已经读了一些关于作用域的内容,我希望下面的代码能够正常工作,但是函数外的最好的变量的作用域似乎与方法函数内的变量不同 var thebest = 0; ec.get("id", function(thebest,all) { }); alert(thebest); var thebest = 0; ec.get("id",
ec.get中从回调函数function(thebest,all)
中提取变量thebest
我已经读了一些关于作用域的内容,我希望下面的代码能够正常工作,但是函数外的最好的变量的作用域似乎与方法函数内的变量不同
var thebest = 0;
ec.get("id", function(thebest,all) { });
alert(thebest);
var thebest = 0;
ec.get("id", function(theNewBest,all) { theBest = 'new value' });
alert(thebest);
我还尝试在外部使用不同的变量名,但没有任何区别。如何从方法及其函数外部访问“最内部的”thebest
变量的值?谢谢 这里似乎有几个问题:
问题1:如果要更改回调函数中的theBest
的值,则不能通过将其作为参数传递来进行更改。简单变量通过值传递,因此如果在函数中更改原始变量,则不会更改原始变量
var thebest = 0;
ec.get("id", function(thebest,all) { });
alert(thebest);
var thebest = 0;
ec.get("id", function(theNewBest,all) { theBest = 'new value' });
alert(thebest);
问题2:假设ec.get()
是一个网络操作,它可能是异步的,这意味着你传递给它的回调函数直到很久以后才会被调用。这意味着,当警报触发时,完成回调函数尚未执行。所以,它不会改变任何事情
问题3:您不能以声明回调的方式将参数传递给回调。这将定义这些参数,但除非ec.get()
像那样传递参数,否则调用时这些参数实际上不会出现。记住,在内部调用函数的是ec.get()
。它独自决定回调得到的参数。你不能改变这一点
问题4:当您为函数声明一个与局部或全局变量同名的参数时(在您的示例中是最好的
),您会创建一个名称冲突,这会导致该参数在函数范围内接管该名称,并使更高级别的变量无法访问。一般来说,用与作用域中任何其他变量相同的名称命名函数参数是个坏主意。它只是要求您或其他阅读您的代码的人感到困惑,并在使用该名称时对修改或读取的内容做出错误的假设
一种方法如下:
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
这里似乎有几个问题:
问题1:如果要更改回调函数中的theBest
的值,则不能通过将其作为参数传递来进行更改。简单变量通过值传递,因此如果在函数中更改原始变量,则不会更改原始变量
var thebest = 0;
ec.get("id", function(thebest,all) { });
alert(thebest);
var thebest = 0;
ec.get("id", function(theNewBest,all) { theBest = 'new value' });
alert(thebest);
问题2:假设ec.get()
是一个网络操作,它可能是异步的,这意味着你传递给它的回调函数直到很久以后才会被调用。这意味着,当警报触发时,完成回调函数尚未执行。所以,它不会改变任何事情
问题3:您不能以声明回调的方式将参数传递给回调。这将定义这些参数,但除非ec.get()
像那样传递参数,否则调用时这些参数实际上不会出现。记住,在内部调用函数的是ec.get()
。它独自决定回调得到的参数。你不能改变这一点
问题4:当您为函数声明一个与局部或全局变量同名的参数时(在您的示例中是最好的
),您会创建一个名称冲突,这会导致该参数在函数范围内接管该名称,并使更高级别的变量无法访问。一般来说,用与作用域中任何其他变量相同的名称命名函数参数是个坏主意。它只是要求您或其他阅读您的代码的人感到困惑,并在使用该名称时对修改或读取的内容做出错误的假设
一种方法如下:
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);
如果回调是快速执行的(不是异步的),那么您可以简单地将其分配给一个不同名称的变量。比如说
var theBest = 0;
ec.get("id", function(theBestArg,all) { theBest = theBestArg; });
alert(thebest);
您的问题是您正在重新定义最佳
作为函数的参数
var thebest = 0;
ec.get("id", function(thebest,all) { });
alert(thebest);
var thebest = 0;
ec.get("id", function(theNewBest,all) { theBest = 'new value' });
alert(thebest);
您的问题是您正在重新定义最佳
作为函数的参数
var thebest = 0;
ec.get("id", function(thebest,all) { });
alert(thebest);
var thebest = 0;
ec.get("id", function(theNewBest,all) { theBest = 'new value' });
alert(thebest);
定义为函数参数的最佳变量仅存在于括号之间的函数范围内。仅函数(thebest,all){此处
}定义为函数参数的最佳变量仅存在于括号之间的函数范围内。仅函数(最好的,全部){此处
}