繁体   English   中英

在函数之外的函数内访问函数中的变量?

[英]Access variable in function within function outside of function?

我有以下代码将我的iOS设备注册到我的APNS服务器:

pushNotification.registerDevice({
    alert: true,
    badge: true,
    sound: true,
    pw_appid: "***",
    appname: "***"
},

function (status) {
    var deviceToken = status['deviceToken'];
},

function (status) {
    console.warn('failed to register : ' + JSON.stringify(status));
    navigator.notification.alert(JSON.stringify(['failed to register ', status]));
});

这在onLoad运行,但是我需要在pushNotification.registerDevice() function (status)的范围之外访问deviceToken

在这种情况下,是否可以访问在函数内部,函数外部,函数内部的deviceToken

我以为可以通过使用window.deviceToken使其成为全局变量,然后稍后调用它,但是它返回未定义的值。

您可以给deviceToken更大的范围:

var deviceToken;

pushNotification.registerDevice({
    alert: true,
    badge: true,
    sound: true,
    pw_appid: "***",
    appname: "***"
},

function(status) {
    deviceToken = status['deviceToken'];
},

function(status) {
    console.warn('failed to register : ' + JSON.stringify(status));
    navigator.notification.alert(JSON.stringify(['failed to register ', status]));
});​

对其进行更改以使deviceToken成为全局变量,以便通过直接引用全局范围在外部范围中可用。

function (status) {
    window.deviceToken = status['deviceToken'];
},

如果只希望在父作用域中使用它,而不必在全局作用域中使用它,则可以在所需的父作用域中定义它,然后不在函数中重新声明它:

var deviceToken;

pushNotification.registerDevice({
    alert: true,
    badge: true,
    sound: true,
    pw_appid: "***",
    appname: "***"
},

function (status) {
    deviceToken = status['deviceToken'];
},

function (status) {
    console.warn('failed to register : ' + JSON.stringify(status));
    navigator.notification.alert(JSON.stringify(['failed to register ', status]));
});

如果要将令牌分配给全局并在尝试使用它时发现其未定义,则可能会找到它,因为registerDevice ajax尚未收到响应。

尝试将回调分为一个单独的函数,然后从那里启动所有依赖函数。

function registerSuccess(status) {
  // Store token globally
  token = status["deviceToken"];
  // or pass as an argument
  // call functions that depend on the token
  Foo(token);
  Bar(); // uses global
}

我个人将尝试作为参数传递,以免污染全局名称空间。

暂无
暂无

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

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