函数内函数内的函数访问变量?

时间:2012-10-24 23:11:18

标签: javascript

我有以下代码将我的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,但我需要访问deviceToken范围之外的pushNotification.registerDevice() function (status)

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

我以为我可以使用window.deviceToken将其作为全局变量,然后再调用它,但它返回undefined。

3 个答案:

答案 0 :(得分:3)

您可以为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]));
});​

答案 1 :(得分:2)

将其更改为使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]));
});

答案 2 :(得分:2)

如果您将令牌分配给全局并在尝试使用它时发现它未定义,您可能会找到它,因为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
}

就个人而言,我会尝试传递作为参数,除了污染全局命名空间。