getting-started-with-javascript icon indicating copy to clipboard operation
getting-started-with-javascript copied to clipboard

做菜流程:流程控制函数里的一个疑问?

Open lichen19844 opened this issue 7 years ago • 3 comments

高阳老师好,我在试验改做菜流程的代码后,有一个地方不是很明白, 流程控制函数startWorkFlow()里的var labour2 = prepare();,其prepare();不就是下面这个输出吗?:

劳动最光荣
['磨刀', '洗碗', '打扫']

好奇var labour2 = prepare();为什么最后只会输出劳动最光荣呢? 然而在增加了console.log('准备' + labour2)后,才出现了磨刀,洗碗,打扫的字样。

代码如下:

  // 做准备工作的函数
  function prepare() {
    console.log('劳动最光荣');
    var labour = ['磨刀', '洗碗', '打扫'];
    return labour;
  }

// 采购食物的函数
function buyFoods() {
    console.log('采购原料和菜');
    var foodsList = ['fish', 'egg', 'meat'];
    return foodsList;
  }
  
  // 做菜的函数
  // 
  function cooking(foodsList) {
    console.log('今天要做这些菜:' + foodsList);
    console.log('大工告成,上菜');
  
    var feast = ['鸡蛋西红柿', '红烧肉', '红烧鱼'];
    return feast;
  }
  
  // 流程控制函数
  function startWorkFlow() {
    var labour2 = prepare();
  
    if (labour2) {
      console.log('准备' + labour2)
      var foodsList2 = buyFoods();
      var feast2 = cooking(foodsList2);
  
      for (var i = 0; i < feast2.length; i++) {
        console.log(feast2[i]);
      }
      console.log('----酒席准备好了----');
    } else {
      console.log('还没准备好');
    }
  }
  
  // 干活啦~~
  startWorkFlow();

终端输出如下:

劳动最光荣
准备磨刀,洗碗,打扫
采购原料和菜
今天要做这些菜:fish,egg,meat
大工告成,上菜
鸡蛋西红柿
红烧肉
红烧鱼
----酒席准备好了----

lichen19844 avatar Aug 20 '17 07:08 lichen19844

这位同学,看来你不是很明白代码的含义。

console.log('劳动最光荣');
var labour = ['磨刀', '洗碗', '打扫'];

上面是你写的代码,其中第一行的 console.log() 函数,就是用来输出括号里的内容。你的括号里只有 劳动最光荣 这五个字,程序怎么可能再多输出别的东西呢?

Dream4ever avatar Aug 20 '17 08:08 Dream4ever

代码是被编译器一行一行的的解读的,最后你调用startWorkFlow()函数,编译器就会从这个函数的开头一行行解析。

french5 avatar Aug 23 '17 23:08 french5

var labour2 = prepare(),这句代码接收了一个函数的返回值,但是并没有进行输入:console.log操作,必然不会把接收到的值进行输出操作的

zhanglinalove avatar Aug 29 '17 08:08 zhanglinalove