从XMLHttpRequest onload回调访问全局变量
Access global variable from XMLHttpRequest onload callback
如何在request.onload
回调中设置globalBuffer
变量后访问它?我正在学习更多关于闭包的知识,但不明白为什么我不能设置值并在事后检索它。也就是说,为什么console.log(globalBuffer)
返回undefined
?
var globalBuffer;
var context = new webkitAudioContext();
function loadSound(url) {
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.responseType = "arraybuffer";
request.onload = function() {
context.decodeAudioData(request.response, function(buffer) {
// I want to set globalBuffer and retrieve it outside the function
globalBuffer = buffer;
}
);
}
request.send();
}
loadSound("http://upload.wikimedia.org/wikipedia/en/9/9e/Metallica_-_For_Whom_the_Bell_Tolls_%28song%29.ogg");
console.log(globalBuffer);
编辑:
Codepen
loadSound
为异步方法,console.log
为同步方法-不等待loadSound
结束。globalBuffer
的声明值为undefined,该值不需要等待完成就返回loadSound
如何解决的概念证明:
function loadSound(url, callback) {
setTimeout(function() {
return callback('loaded song from: ' + url)
}, 1000);
}
loadSound('url to sound clip', function(response) {
console.log(response);
});
setTimeout
用于模拟异步动作-如果数据可用-回调函数正在调用
相关文章:
- 在page.open()-PhantomJS中无法访问全局变量
- 如何在 JavaScript 中访问全局变量
- 从Javascript中的对象方法中访问全局变量
- 无法从打字稿访问全局变量
- 未访问全局变量,未运行代码
- 为什么我无法从茉莉花中的 javascript 函数访问全局变量
- TypeScript:从类访问全局变量而不导入
- 当 Node.js 中的参数名称相同时,如何从函数访问全局变量
- 为什么我不能在我的 js 函数中访问全局变量
- Chrome扩展JSONP请求访问全局变量
- Javascript:匿名函数,访问全局变量
- Mocha测试未访问全局变量
- 访问全局变量
- 如何从解析模块访问全局变量
- 使用脚本加载程序注入的脚本访问全局变量
- 访问全局变量的嵌套成员可能不同
- JS:我怎样才能阻止访问全局变量呢?
- 使用Chrome访问全局变量
- 把手访问全局变量:if语句
- JS -访问全局变量问题