【问题标题】:Javascript access variable in self invoking function [duplicate]自调用函数中的Javascript访问变量[重复]
【发布时间】:2017-06-29 08:53:22
【问题描述】:

我试图通过一些嵌套的自调用函数在父函数级别为变量赋值。我是 javascript 编码的新手,在从嵌套函数中获取变量的值时遇到了一些麻烦。值是异步加载的吗?或者还有其他解决方法吗?

function searchA(keyword_string) {

                var video_id = '';
                var q = keyword_string;
                var request = gapi.client.youtube.search.list({
                        q: q, 
                        part: 'snippet',
                        maxResults: '1',
                        type: 'video',
                        order: 'relevance',
                        videoEmbeddable: 'true'
                });
                request.execute(function(response) {
                        var str = JSON.stringify(response.result);
                        var json = response.result;
                        video_id = json.items[0].id.videoId;
                        console.log(video_id); //THIS GIVES THE CORRECT ID
                });
                console.log(video_id); //THIS RETURNS AN EMPTY STRING 
        }

【问题讨论】:

  • 返回不正确video_id 的行在返回正确行之前执行。稍微检查一下代码,您就会立即知道原因。
  • 将 video_id 分配给空字符串的第一行?是的,但我不是将其值重新分配给 json.items[0].id.videoId 吗?该变量的范围仍然是该函数的本地变量。如何使其对整个父函数“searchA()”具有全局性
  • 作用域不是这里的问题,而是执行顺序。

标签: javascript callback asynccallback self-invoking-function


【解决方案1】:

是的,正在异步加载值

我不知道Google API的具体情况,但是request.execute方法的第一个参数必须是回调函数,只有在响应到达时才会执行

这样,最后一个console.log(video_id) 将在之前 video_id = json.items[0].id.videoId 执行。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2022-12-02
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    相关资源
    最近更新 更多