gpt4 book ai didi

Javascript 变量作用域行为

转载 作者:行者123 更新时间:2023-11-30 10:17:38 25 4
gpt4 key购买 nike

在我下面的代码中,如果我在函数 __call 中初始化它,我不明白为什么在最终的 console.log 变量 bearer_token 中未定义。

home: function () {
var bearer_token;
var cb = new Codebird;
cb.setConsumerKey("Zox*O8n1u", "zaCTe5oI23bxx***CG87e8hkgZgBeIHV7LKp");
cb.__call(
"oauth2_token", {},
function (reply) {
var bearer_token = reply.access_token;
}
);
$.ajax({
url: "http://search.twitter.com/search.json?q=felpone",
dataType: "jsonp",
jsonpCallback: "myFunction",
beforeSend: function (xhr, settings) {
xhr.setRequestHeader('Authorization', 'Bearer ' + bearer_token);
}
});

function myFunction(r) {
console.log(r);
}
console.log(bearer_token);
},

最佳答案

两种可能性:

function (reply) {
var bearer_token = reply.access_token;
}

这段代码将 reply.access_token 分配给 bearer_token 在该函数内部,而不是在函数外部。这意味着如果该代码运行,它不会影响外部 bearer_token。为此,请删除 var

接下来,我注意到该函数有一个“oauth2_token”字符串。 __call 是异步调用吗?如果是这样,那么它旁边的函数就是回调。当您执行 console.log(bearer_token) 时,响应可能尚未到达。要在异步操作的响应返回后执行代码,请将所有应在响应到达后运行的代码放在回调中。

这应该有效:

home: function () {

var cb = new Codebird;
cb.setConsumerKey("Zox*O8n1u", "zaCTe5oI23bxx***CG87e8hkgZgBeIHV7LKp");

cb.__call("oauth2_token", {}, function (reply) {

var bearer_token = reply.access_token;
console.log(bearer_token);

$.ajax({
url: "http://search.twitter.com/search.json?q=felpone",
dataType: "jsonp",
beforeSend: function (xhr, settings) {
xhr.setRequestHeader('Authorization', 'Bearer ' + bearer_token);
}
}).done(function (data) {
console.log(data);
});

});
},

关于Javascript 变量作用域行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23035808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com