听起来像一个基本问题,但我坚持使用javascript变量作用域。 我想得到一个作为参数传递给另一个函数的函数值。
实施例: 全局变量number1始终返回初始值'',而不是get函数的第二个参数的值。
出了什么问题?
var number1 = '';
cordova.require("applicationPreferences").get("NumTel",function (value) {
number1 = value;
},
function (error) {}
);
console.log("Number1 = " + number1);
答案 0 :(得分: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);
}