2014-02-05 36 views
1

的聽起來像一個基本的問題,但我堅持的JavaScript變量範圍。 我想獲得作爲參數傳遞給另一個函數的函數值。的javascript如何獲取函數的返回值out參數功能

例如: 全局變量number1總是返回初始值''而不是get函數的第二個參數的值。

怎麼了?

var number1 = ''; 
    cordova.require("applicationPreferences").get("NumTel",function (value) { 
      number1 = value; 
     }, 
     function (error) {} 
    ); 
    console.log("Number1 = " + number1); 

回答

3

因爲至少有一個異步操作,你不能讓這個值了功能,因爲該功能將獲得在將來某個時候叫,不久之後你console.log()語句已經執行。

在異步編程中,您必須在回調中使用value,或者必須從回調調用另一個函數並將其傳遞給value。要在JavaScript中使用異步編程,您必須更改設計思路。您不能只使用同步技術,因爲代碼流不再同步。

把你所有的邏輯要使用該值步入回調本身。

cordova.require("applicationPreferences") 
     .get("NumTel", function (value) { 
      // put all your code here that uses value 
      // or call another function and pass the value to it 
      myFunc(value); 
     }, function (error) { 
     } 
); 

function myFunc(x) { 
    console.log("Number1 = " + x); 
} 

或者,你可以做到這一點,甚至不必像這樣的匿名函數:

cordova.require("applicationPreferences") 
     .get("NumTel", myFunc, function (error) { 
     } 
); 

function myFunc(x) { 
    console.log("Number1 = " + x); 
} 
+0

如果您命名的功能,沒有必要爲一個空的包裝...... – dandavis

+0

@dandavis - 我加該選項也是如此。 – jfriend00

+0

工作完美。非常感謝您的明確解釋。 – nicBBB

相關問題