首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >你怎么知道一个大函数里面的函数是在调用?

你怎么知道一个大函数里面的函数是在调用?
EN

Stack Overflow用户
提问于 2019-04-01 01:01:58
回答 1查看 0关注 0票数 0

我有以下问题:

得到Dog Breeder 定义一个函数getDogBreeder,它接受默认名称和年龄,并返回dogBreeder函数。返回的dogBreeder函数应该使用调用dogBreeder时定义的默认值。

这是问题的正确代码答案,但我不太明白为什么解决方案有效。

function getDogBreeder(defaultName, defaultAge){

  return function (name = defaultName, age = defaultAge){

    if (typeof name === 'number'){
      age = name; 
      name = defaultName; 
    }

    let newDog = {
      name: name, 
      age: age
    }; 

    return newDog; 

  }
}



let puppyFarm = getDogBreeder('Snoopy', 0);

puppyFarm('Olaf', 3); // solution: => {name: 'Olaf', age: 3};
  1. 是返回函数(...)在代码底部调用puppyFarm函数?如果是这样,怎么知道叫puppyFarm?
  2. 在return函数(...)中,因为我将name参数赋值给defaultName,为什么它从外部getDogBreeder函数中获取Olaf而不是Snoopy?
EN

回答 1

Stack Overflow用户

发布于 2019-04-01 10:02:48

为了便于比较,这是你将如何获取所设定的时间值dogBreeder定义(这似乎是您所期望的),而不是当它来

它使用了闭包的概念,其他人可能更好地解释。粗略地说,内部函数使用在它创建的词法范围内存在的值(即外部函数),即使在该范围已经“关闭”之后也是如此。

(我现在仍然试图自己解决这个问题,如果我说任何误导,请有人纠正我。)

function getDogBreeder(defaultName, defaultAge){

  // This is the lexical scope from where dogBreeder gets its values
  const name = defaultName;
  const age = defaultAge;
  
  function dogBreeder(){ // Takes no arguments
    let newDog = {
      name: name, 
      age: age
    }; 
    return newDog; // Returns `{ name: defaultName, age: defaultAge }`
  }
  
  // Returns a function that returns `{ name: defaultName, age: defaultAge }`
  return dogBreeder; 
}

// Returns a function that returns `{ name: 'Snoopy', age: 0 }`
let puppyFarm = getDogBreeder('Snoopy', 0);

// puppyFarm is like an instance of dogBreeder -- arguments are irrelevant
let dog = puppyFarm('Olaf', 3);

console.log(dog); // Logs `{ "name": "Snoopy", "age": 0 }`

我猜测,因为你的匿名函数(function (name = defaultName, age = defaultAge){...)接受从全局作用域传入的值(并没有在外部函数的作用域中显式声明),所以它不是一个闭包,它将使用给出的任何值。它被称为。至少这是我看到的唯一主要区别。

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

https://stackoverflow.com/questions/-100006529

复制
相关文章

相似问题

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