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

lesson4文件中 var success = prepare();的执行细节

Open mdqsky opened this issue 7 years ago • 4 comments

JS课程问题- var success = prepare();的执行细节

将函数赋值给变量

函数来源:

getting-started-with-javascript/study/lesson4/kitchen_workflow.js

问题1:

第29行的"var success = prepare();"具体的执行过程是怎样的?

原本我想着这句话只是定义变量success,并将prepare()的return赋值给success。

但我测试后的感觉是:

  1. 先执行prepare();
  2. 再将prepare函数执行完的return结果赋值给新定义的变量success

正确的理解应该是怎样的?

问题2:

接着上一个问题:在实际项目中,有没有一种可能的情况,prepare()函数在其他地方已经执行过了,此处并不想再执行一遍,只需要知道它的return,以便赋给success后做下面(31行)的判断语句。

如果有这种情况,应该怎样改动?我联想到2种可能性

  1. 有没有类似prepare().return之类的参数可以使用
  2. 在prepare函数中使用回调,将return的结果放在回调函数中,等着被使用

mdqsky avatar Sep 01 '17 09:09 mdqsky

问题3:

如果将29行的"var success = prepare();"放到函数外(例如前面的26行),那success是不是就变成全局变量了?整个代码执行起来也是一样的,只不过这个success也可以被其他函数用了?这就是老师今晚提到的作用域么?

mdqsky avatar Sep 01 '17 13:09 mdqsky

新的发现

今天用昨晚老师教的console.log(n);理解程序运行顺序,感觉头脑里的逻辑更清晰了,十分感谢!又测试了问题3的变体,发现把29行放出来后,prepare()会先于startWork()执行,似乎会改变程序设计时的本意。相比只是一个数组、字符串之类的局部变量变成全局变量,影响更大,要考虑的点也更多。

mdqsky avatar Sep 02 '17 04:09 mdqsky

是不是问题都解决了?

xugy0926 avatar Sep 02 '17 09:09 xugy0926

并不是完全清楚,还是希望能点评一下 发自网易邮箱大师 在2017年09月02日 17:53,xugaoyang 写道: 是不是问题都解决了? — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or mute the thread.

mdqsky avatar Sep 02 '17 13:09 mdqsky