最佳答案
给出以下示例,为什么outerScopeVar
在所有情况下都未定义?
var outerScopeVar;
var img = document.createElement('img');img.onload = function() {outerScopeVar = this.width;};img.src = 'lolcat.png';alert(outerScopeVar);
var outerScopeVar;setTimeout(function() {outerScopeVar = 'Hello Asynchronous World!';}, 0);alert(outerScopeVar);
// Example using some jQueryvar outerScopeVar;$.post('loldog', function(response) {outerScopeVar = response;});alert(outerScopeVar);
// Node.js examplevar outerScopeVar;fs.readFile('./catdog.html', function(err, data) {outerScopeVar = data;});console.log(outerScopeVar);
// with promisesvar outerScopeVar;myPromise.then(function (response) {outerScopeVar = response;});console.log(outerScopeVar);
// with observablesvar outerScopeVar;myObservable.subscribe(function (value) {outerScopeVar = value;});console.log(outerScopeVar);
// geolocation APIvar outerScopeVar;navigator.geolocation.getCurrentPosition(function (pos) {outerScopeVar = pos;});console.log(outerScopeVar);
为什么在所有这些示例中输出undefined
?我不想要变通方法,我想知道为什么这正在发生。
备注:这是JavaScript异步性的一个规范问题。请随时改进此问题并添加更多社区可以识别的简化示例。