首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数中的函数不是函数。

函数中的函数不是函数。
EN

Stack Overflow用户
提问于 2021-10-21 10:34:24
回答 2查看 189关注 0票数 1

我简化了我的代码,这样你就可以帮我解决这个问题了。我试图在一个函数中调用一个函数,控制台说getId不是一个函数。我真的希望你能帮忙!

代码语言:javascript
复制
/* Get username */
let getUsername = function() {
  return 'johndoe';
};

/* Get ID */
let getId = function() {
  console.log(getUsername());
  if (getUsername() == 'johndoe') {
    return 1;
  }
};

function getFollowerslist() {
  console.log(getId());
  return getId(getUsername);
};

console.log(getFollowerslist()); /* Error: getId is not a function */

编辑:

我简化代码时犯了一个错误。真正的问题并不是在我最初的声明中发现的问题。

问题是,我的函数getId()从Instagram URL中获取ID并返回它太晚了。

当我从getId()内部调用getFollowerslist()时,它会返回未定义的结果,因为getId()还没有结果。

代码语言:javascript
复制
/* Works every time */
let getId = function() {
    fetch("https://www.instagram.com/johndoe/?__a=1", {properties})
  .then(response => response.json())
  .then(data => {
      console.log('ID:' + data["graphql"]['user']['id']);
    return data["graphql"]['user']['id'];
  });
};

let getFollowers = function() {

    /* undefined */
    console.log('ID: ' + getId());

    /* R<est of the function doesn't work because getId returns undefined */
};

console.log(getId()); /* Works!!! */
console.log(getFollowers()); /* undefined */
EN

回答 2

Stack Overflow用户

发布于 2021-10-21 10:43:02

您只是没有填写参数;执行以下操作,它将运行:

代码语言:javascript
复制
let getUsername = function() {
    return 'johndoe';
};

/* Get ID */
let getId = function(getUsername) {
    if (getUsername() == 'johndoe') {return 1;}
};

function getFollowerslist(getId, getUsername) {
    return getId(getUsername);
};

console.log(getFollowerslist(getId, getUsername));

您在函数getFollowerslist中使用了getFollowerslist,但在调用函数时没有传递它,因此,getId最终成为了undefined。正如您所看到的,undefined不是一个函数。

如果在声明getFollowerslist函数时参数部分保持为空,那么getIdgetUsername就不会被覆盖,并且会正常工作。见下文:

代码语言:javascript
复制
let getUsername = function() {
    return 'johndoe';
};

/* Get ID */
let getId = function(getUsername) {
    if (getUsername() == 'johndoe') {return 1;}
};

function getFollowerslist() {
    return getId(getUsername);
};

console.log(getFollowerslist());

编辑:

既然你修改了你的问题,下面是我编辑过的答案

代码语言:javascript
复制
let getId = async function() {
    let response = await fetch("https://www.instagram.com/johndoe/?__a=1",{ properties })
  response = response.json()
  return response;
};

let getFollowers = async function() {
    console.log('ID: ' + await getId());
};

console.log(getId()); /* Works!!! */
console.log(getFollowers()); /* undefined */

我设法得到了你的回应,但由于我似乎有一些CORS的问题,我不知道这是否是你想要的。您需要修改代码(例如,return response,它只返回响应,对我来说,这似乎就是{})。对您来说,似乎需要将其更改为return response["graphql"]['user']['id']

票数 1
EN

Stack Overflow用户

发布于 2021-10-21 10:52:51

问题很简单:函数和参数使用相同的名称。

在此功能范围内:

代码语言:javascript
复制
function getFollowerslist(getId, getUsername) {
  console.log(typeof getId); //writes undefined
  return getId(getUsername);
};
console.log(typeof getId); //writes "function"

..。名称"getId“指的是参数(而不是全局函数)。在这个函数之外,"getId“是一个函数。

只需更改参数名,使它们与函数不匹配。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69660354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档