簡體   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