据我所知,只有函数表达式的声明部分被吊起,而不是初始化。
例如。:

var myFunction = function myFunction() {console.log('Hello World');};

因此,“var myFunction;”被吊起,但没有“功能myFunction()...”。

现在我的问题,我玩了一点谷歌身份验证功能:
"use strict";

$(document).ready = (function() {
  var clientId = 'MYCLIENTID';
  var apiKey = 'MYAPIKEY';
  var scopes = 'https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.readonly https://www.googleapis.com/auth/drive.appfolder https://www.googleapis.com/auth/drive.apps.readonly https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive.install https://www.googleapis.com/auth/drive.metadata https://www.googleapis.com/auth/drive.metadata.readonly https://www.googleapis.com/auth/drive.photos.readonly https://www.googleapis.com/auth/drive.scripts';

  $('#init').click(function() {
    gapi.client.setApiKey(apiKey);
    window.setTimeout(checkAuth(false, handleAuthResult), 1);
  });

  var checkAuth = function checkAuth(imm, callback) {
    gapi.auth.authorize({
      client_id: clientId,
      scope: scopes,
      immediate: imm
    }, callback);
  };

  var handleAuthResult = function handleAuthResult(authResult) {
    if (authResult) {
      gapi.client.load('drive', 'v2', initialize);
    } else {
      $('#progress').html('Anmeldung fehlgeschlagen');
    }
  };

  // Other code
})();

在第10行“window.setTimeout(checkAuth ...)”中,我调用了在此函数调用下方声明的checkAuth函数。我的假设是我收到一条错误消息,指出“... checkAuth不是函数/未定义等。 ”,但它确实起作用了。有人可以向我解释一下吗?

最佳答案

这是因为当触发元素上的实际单击事件时,然后在范围内可以使用checkAuth。您预期的错误将以这种方式发生:

checkAuth(false, ...); // the symbol is available, but...

// its value is assigned here
var checkAuth = function checkAuth() {
    /* more code */
};

请注意,在上述代码段中分配checkAuth()之前,立即对其进行了调用。

调用时可用的符号是checkAuth;但是,其值稍后会分配。因此,错误checkAuth不是函数,而不是未定义checkAuth。

07-24 18:16