第二次课程总结.md
这是我的主页:https://wangzhong2014.github.io/javascript/
本文是新生大学徐老师编程课的第二次作业。上课时,老师以小明为例子,把一个现实生活中的小明,推到成了虚拟世界中的小明。
Repository: xugy0926/getting-started-with-javascript Branch: master Commit: 5eb1b97442ba Files: 684 Total size: 1.2 MB Directory structure: gitextract_7orgddh0/ ├── .gitignore ├── README.md ├── _config.yml ├── homework/ │ ├── lesson1/ │ │ ├── Autumn.md │ │ ├── ElizabethZhouli.md │ │ ├── GaoXianfeng.md │ │ ├── Huang_Biling.md │ │ ├── Jaykey.md │ │ ├── Learner-Chen.md │ │ ├── LiaoYuemin.md │ │ ├── Liuzhengchun.md │ │ ├── Rachel.md │ │ ├── Risexie.md │ │ ├── SunBo.md │ │ ├── WangChangQing.md │ │ ├── Wei.md │ │ ├── WuGaoxing.md │ │ ├── XGunn-lesson01.md │ │ ├── ZhengChao.md │ │ ├── anjiancai.md │ │ ├── baoguoqiang.md │ │ ├── caijinpeng.md │ │ ├── caozhen.md │ │ ├── chaigaoping.md │ │ ├── chengjun.md │ │ ├── chenlingmin.md │ │ ├── chenqiong.md │ │ ├── chenrushan.md │ │ ├── chenyanxing.md │ │ ├── chenzidong.md │ │ ├── chenziwen.md │ │ ├── cloudyview.md │ │ ├── cuimeng.md │ │ ├── cuimiao.md │ │ ├── dangfeipeng.md │ │ ├── dengxy0907.md │ │ ├── diaozhicong.md │ │ ├── donglili.md │ │ ├── duhongxia.md │ │ ├── fangqingyang.md │ │ ├── fanliao.md │ │ ├── fanqing.md │ │ ├── feixiguang.md │ │ ├── fengkai.md │ │ ├── hanmeng.md │ │ ├── hanwei.md │ │ ├── haohu.md │ │ ├── hewei.md │ │ ├── huangjiashu.md │ │ ├── huangqi.md │ │ ├── huangxiaohui.md │ │ ├── huangzhihua.md │ │ ├── huxiaodan.md │ │ ├── huyong.md │ │ ├── ianyang.md │ │ ├── jaychen.md │ │ ├── jianglin.md │ │ ├── langjianjun.md │ │ ├── leizhen.md │ │ ├── lichen.md │ │ ├── linchunlong.md │ │ ├── lingxiao.md │ │ ├── linxiyao.md │ │ ├── lipeng.md │ │ ├── lipengyu.md │ │ ├── litao.md │ │ ├── liujuanjuan1984.md │ │ ├── liujun-sh.md │ │ ├── liujun.md │ │ ├── liuliyuan.md │ │ ├── liuqing.md │ │ ├── liuruyong.md │ │ ├── liushengsi.md │ │ ├── liushengxin.md │ │ ├── liuxiaohaohao.md │ │ ├── lixiang.md │ │ ├── lixiaoxin.md │ │ ├── liyihang.md │ │ ├── luoruijun.md │ │ ├── maggiewong.md │ │ ├── panqi.md │ │ ├── panyong.md │ │ ├── qiujingyu.md │ │ ├── shaozhen.md │ │ ├── shenzhili.md │ │ ├── sophieQi.md │ │ ├── sunxl.md │ │ ├── tangjianfeng.md │ │ ├── taobao.md │ │ ├── tuyilang.md │ │ ├── wangmeiling.md │ │ ├── wangshasha.md │ │ ├── wangwei.md │ │ ├── wangxuanding.md │ │ ├── wangyuliang.md │ │ ├── wangyunfei.md │ │ ├── wangzhongbin.md │ │ ├── wenliuxin.md │ │ ├── wenyunxin.md │ │ ├── wufan.md │ │ ├── wukuipin.md │ │ ├── xianengqi.md │ │ ├── xiaochaoge.md │ │ ├── xieyuhui.md │ │ ├── xiongliyu.md │ │ ├── xugang.md │ │ ├── xugaoyang.md │ │ ├── xuli.md │ │ ├── xuluchun.md │ │ ├── xumin.md │ │ ├── yammy.md │ │ ├── yangchunguang.md │ │ ├── yanglovewo.md │ │ ├── yangtieming.md │ │ ├── yangxuewu.md │ │ ├── yangyepeng.md │ │ ├── yanqingmu.md │ │ ├── yimiao.md │ │ ├── yongfei.md │ │ ├── youshilei.md │ │ ├── yueruiqi.md │ │ ├── yujianke.md │ │ ├── zhanggaoyang.md │ │ ├── zhanghuanyuan.md │ │ ├── zhanghy.md │ │ ├── zhanglina.md │ │ ├── zhangqian.md │ │ ├── zhangruirui.md │ │ ├── zhangxuedong.md │ │ ├── zhaokaili.md │ │ ├── zhaoxiaoxin.md │ │ ├── zhaoyinan.md │ │ ├── zhouhong.md │ │ ├── zhouqizhou.md │ │ ├── zhouziqi.md │ │ ├── zhuningning.md │ │ ├── zhuting.md │ │ ├── zhuxiaoping.md │ │ └── zhuyongjin.md │ ├── lesson2/ │ │ ├── Autumnchou.md │ │ ├── GaoXianfeng.md │ │ ├── JayChen.md │ │ ├── Jaykey_Guo.md │ │ ├── LiaoYuemin.md │ │ ├── Liuzhengchun.md │ │ ├── Rachel.md │ │ ├── Risexie.md │ │ ├── SunBo.md │ │ ├── WANG XUANDING.md │ │ ├── WangChangQing.md │ │ ├── WuGaoxing.md │ │ ├── Zhengchao.md │ │ ├── baoguoqiang.md │ │ ├── caozhen.md │ │ ├── chengjun.md │ │ ├── chenguoqiang.md │ │ ├── chenqiong.md │ │ ├── chenrushan.md │ │ ├── chenziwen.md │ │ ├── cloudyview.md │ │ ├── cuimiao.md │ │ ├── dangfeipeng.md │ │ ├── dengxy0907.md │ │ ├── diaozhicong.md │ │ ├── duhongxia.md │ │ ├── fangqingyang.md │ │ ├── fanqing.md │ │ ├── fengkai.md │ │ ├── guowei.md │ │ ├── hanmeng.md │ │ ├── hanwei.md │ │ ├── haohu.md │ │ ├── hewei.md │ │ ├── huangjiashu.md │ │ ├── huangqi.md │ │ ├── huangzhihua.md │ │ ├── huyong.md │ │ ├── jianglin.md │ │ ├── langjianjun.md │ │ ├── leizhen.md │ │ ├── lichen.md │ │ ├── lingxiao.md │ │ ├── linxiyao.md │ │ ├── lipeng.md │ │ ├── litao.md │ │ ├── liujuanjuan.md │ │ ├── liujun.md │ │ ├── liuliyuan.md │ │ ├── liuqing.md │ │ ├── liuruyong.md │ │ ├── liushengsi.md │ │ ├── liushengxin.md │ │ ├── liuxiaohaohao.md │ │ ├── lixiang.md │ │ ├── liyihang.md │ │ ├── luoruijun.md │ │ ├── marshalcy.md │ │ ├── panqi.md │ │ ├── panyong.md │ │ ├── qiujingyu.md │ │ ├── shaozhen.md │ │ ├── shenzhili.md │ │ ├── sophieQi.md │ │ ├── tangjianfeng.md │ │ ├── taobao.md │ │ ├── tuyilang.md │ │ ├── wangshasha.md │ │ ├── wangwei.md │ │ ├── wangying.md │ │ ├── wangyunfei.md │ │ ├── wangzhongbin.md │ │ ├── wenliuxin.md │ │ ├── wenyunxin.md │ │ ├── wufan.md │ │ ├── wukuipin.md │ │ ├── xianengqi.md │ │ ├── xiongliyu.md │ │ ├── xugaoyang.md │ │ ├── xuli.md │ │ ├── xuluchun.md │ │ ├── xumin.md │ │ ├── yammy.md │ │ ├── yangtieming.md │ │ ├── yangxuewu.md │ │ ├── yangyepeng.md │ │ ├── yanqingmu.md │ │ ├── yimiao.md │ │ ├── yongfei.md │ │ ├── youshilei.md │ │ ├── yueruiqi.md │ │ ├── yujianke.md │ │ ├── zhanggaoyang.md │ │ ├── zhanglina.md │ │ ├── zhangqian.md │ │ ├── zhangxuedong.md │ │ ├── zhaokaili.md │ │ ├── zhaoxiaoxin.md │ │ ├── zhaoyinan.md │ │ ├── zhengchengyan.md │ │ ├── zhouhong.md │ │ ├── zhouwenming.md │ │ ├── zhuningning.md │ │ ├── zhuting.md │ │ ├── zhuxiaoping.md │ │ ├── zhuyongjin.md │ │ ├── zongjie-fanliao.md │ │ ├── 第二次作业.md │ │ ├── 第二次课程总结.html │ │ └── 第二次课程总结.md │ ├── lesson3/ │ │ ├── GaoXianfeng.md │ │ ├── Jaykey_Guo.md │ │ ├── LiaoYuemin.md │ │ ├── Risexie.md │ │ ├── WangChangQing.md │ │ ├── caijinpeng.md │ │ ├── cloudyview.md │ │ ├── cuimiao.md │ │ ├── dengxy0907.md │ │ ├── fangqingyang.md │ │ ├── guowei.md │ │ ├── hanwei.md │ │ ├── hewei.md │ │ ├── huangBiLing.md │ │ ├── jianglin.md │ │ ├── leizhen.md │ │ ├── lichen.md │ │ ├── lipeng.md │ │ ├── liujuanjuan1984.md │ │ ├── liuxiaohaohao.md │ │ ├── panqi.md │ │ ├── sophieQi.md │ │ ├── taobao.md │ │ ├── wangwei.md │ │ ├── wangyunfei_zongjie.md │ │ ├── wenliuxin.md │ │ ├── wufan.md │ │ ├── wukuipin.md │ │ ├── xianengqi3.md │ │ ├── xiaochaoge.md │ │ ├── xiaoyi.md │ │ ├── xiongliyu.md │ │ ├── xugaoyang.md │ │ ├── yammy.md │ │ ├── yanqingmu.md │ │ ├── zhaoxiaoxin.md │ │ ├── 第三次作业 交互图.md │ │ └── 谢玉辉.md.md │ ├── lesson4/ │ │ ├── Jaykey.md │ │ ├── Risexie.md │ │ ├── WuGaoxing.md │ │ ├── jianglin.md │ │ ├── liujuanjuan1984.md │ │ ├── panyong.md │ │ ├── taobao.md │ │ └── xiaochaoge.md │ ├── lesson5/ │ │ ├── GaoXianfeng.md │ │ ├── JayChen.md │ │ ├── Jaykey_Guo.md │ │ ├── LiaoYuemin.md │ │ ├── LiuShengsi's homework of lesson5.md │ │ ├── Risexie.md │ │ ├── WANG Xuanding.md │ │ ├── WuGaoxing.md │ │ ├── Zhengchao.md │ │ ├── anjiancai.md │ │ ├── baoguoqiang.md │ │ ├── caijinpeng.md │ │ ├── caozhen.md │ │ ├── chenguoqiang.md │ │ ├── chenrushan.md │ │ ├── chenyanxing.md │ │ ├── chenziwen.md │ │ ├── cloudyview.md │ │ ├── cuimiao.md │ │ ├── dengxy0907.md │ │ ├── diaozhicong.md │ │ ├── donglili.md │ │ ├── fangqingyang.md │ │ ├── fanliao.md │ │ ├── fanqing.md │ │ ├── fengkai.md │ │ ├── guowei.md │ │ ├── hanwei.md │ │ ├── haohu.md │ │ ├── hewei.md │ │ ├── huangBiLing.md │ │ ├── huangjiashu.md │ │ ├── huyong.md │ │ ├── jianglin.md │ │ ├── langjj.md │ │ ├── lichen.md │ │ ├── limu.md │ │ ├── lingxiao.md │ │ ├── linxiyao-homework-lesson5.md │ │ ├── lipeng-学习“异步实现一桌酒席”心得,代码难点分析.md │ │ ├── lipeng.md │ │ ├── liujuanjuan1984.md │ │ ├── liujun.md │ │ ├── liuliyuan.md │ │ ├── liuruyong.md │ │ ├── liushengxin.md │ │ ├── lixiang.md │ │ ├── luoruijun.md │ │ ├── maggiewong.md │ │ ├── marshalcy.md │ │ ├── oyanagchun的作业 │ │ ├── panyong.md │ │ ├── qiujingyu.md │ │ ├── readme.md │ │ ├── shaozhen.md │ │ ├── shenzhili.md │ │ ├── sophieQi.md │ │ ├── sunyan.md │ │ ├── tangjianfeng.md │ │ ├── taobao.md │ │ ├── wangchangqing.md │ │ ├── wangwei.md │ │ ├── wangyunfei.md │ │ ├── wangzhongbin.md │ │ ├── wengguihua.md │ │ ├── wenliuxin.md │ │ ├── wenyunxin.md │ │ ├── wufan.md │ │ ├── wukuipin.md │ │ ├── xianengqi.md │ │ ├── xiongliyu.md │ │ ├── yammy.md │ │ ├── yangchunguang.md │ │ ├── yangtieming.md │ │ ├── yangxuewu.md │ │ ├── yanqingmu.md │ │ ├── yimiao li 5th.md │ │ ├── youshilei.md │ │ ├── zhanggaoyang.md │ │ ├── zhanglina.md │ │ ├── zhaoxiaoxin.md │ │ ├── zhaoyinan.md │ │ ├── zhouqizhou.md │ │ ├── zhuningning.md │ │ ├── zhutinglesson5.md │ │ ├── zhuyongjin.md │ │ └── 谢玉辉.md │ ├── lesson6/ │ │ ├── GaoXianfeng.js │ │ ├── LiuShengsi.js │ │ ├── Risexie.js │ │ ├── WANG_Xuanding.js │ │ ├── Wei.js │ │ ├── WuGaoxing.js │ │ ├── anjiancai.js │ │ ├── babysodme.js │ │ ├── baoguoqiang.js │ │ ├── caijinpeng.js │ │ ├── caozhen.js │ │ ├── caozhen.md │ │ ├── chenrushan.js │ │ ├── chenyanxing.js │ │ ├── chenziwen.js │ │ ├── cloudyview.js │ │ ├── cuimiao.js │ │ ├── cuiyuwei.js │ │ ├── dangfeipeng.js │ │ ├── dengxy0907.js │ │ ├── diaozhicong.js │ │ ├── donglili.js │ │ ├── fangqingyang.js │ │ ├── fanliao.js │ │ ├── fengkai.js │ │ ├── hanwei.js │ │ ├── haohu.js │ │ ├── hewei.js │ │ ├── hitchhacker.js │ │ ├── huangjiashu.js │ │ ├── huyong.js │ │ ├── jaykeyGuo.js │ │ ├── jaykeyGuo.md │ │ ├── jianglin.js │ │ ├── langjianjun.js │ │ ├── lesson9.md │ │ ├── lianghf.js │ │ ├── liaoyuemin.js │ │ ├── lichen_async.js │ │ ├── lichen_sync.js │ │ ├── limingxing.js │ │ ├── lingxiao.js │ │ ├── lipeng.js │ │ ├── liujuanjuan1984.js │ │ ├── liujun.js │ │ ├── liuliyuan.js │ │ ├── liuliyuan.md │ │ ├── liushengxin.js │ │ ├── lixiang.js │ │ ├── lixiang.md │ │ ├── luoruijun.js │ │ ├── mindongquan.js │ │ ├── ouyangchun.js │ │ ├── panyong.js │ │ ├── qiujingyu.js │ │ ├── readme.md │ │ ├── shaozhen.js │ │ ├── shenzhili.js │ │ ├── sunyan.js │ │ ├── tangjianfeng.js │ │ ├── taobao.js │ │ ├── tuyilang.js │ │ ├── wangchangqing.js │ │ ├── wangganzy.js │ │ ├── wangshasha.js │ │ ├── wangwei.js │ │ ├── wangyunfei.js │ │ ├── wangzhongbin.js │ │ ├── weiyang.js │ │ ├── wengguihua.js │ │ ├── wenliuxin.js │ │ ├── wenyunxin.js │ │ ├── wufan.js │ │ ├── wukuipin.js │ │ ├── xianengqi.js │ │ ├── xiongliyu.js │ │ ├── yammy.js │ │ ├── yangtieming.js │ │ ├── yangxuewu.js │ │ ├── yanqingmu.js │ │ ├── yimiao.js │ │ ├── youshilei.js │ │ ├── zhanggaoyang.js │ │ ├── zhanglina.js │ │ ├── zhanglina.md │ │ ├── zhaokaili.js │ │ ├── zhaoxiaoxin.js │ │ ├── zhaoxiaoxin.md │ │ ├── zhaoyinan.js │ │ ├── zhengchao.js │ │ ├── zhengchao.md │ │ ├── zhuting.js │ │ ├── zouhainan.js │ │ └── 谢玉辉六课作业.js │ ├── lesson7/ │ │ ├── GaoXianfeng.md │ │ ├── anjiancai.md │ │ ├── chenguoqiang.md │ │ ├── chenrushan.md │ │ ├── chenyanxing.md │ │ ├── chenziwen.md │ │ ├── cloudyview.md │ │ ├── cuiyuwei.md │ │ ├── dangfeipeng.md │ │ ├── dengxy0907.md │ │ ├── diaozhicong.md │ │ ├── fangqingyang.md │ │ ├── fengkai.md │ │ ├── guowei.md │ │ ├── hanwei.md │ │ ├── hewei.md │ │ ├── hitchhacker.md │ │ ├── huangBiLing.md │ │ ├── huangjiashu.md │ │ ├── jaykeyGuoJian.md │ │ ├── liaoyuemin.md │ │ ├── lingxiao.md │ │ ├── lipeng.md │ │ ├── liujun.md │ │ ├── liuliyuan.md │ │ ├── lixiang.js │ │ ├── lixiang.md │ │ ├── luoruijun.md │ │ ├── qiujingyu.md │ │ ├── readme.md │ │ ├── shaozhen.md │ │ ├── shenzhili.md │ │ ├── taobao.md │ │ ├── wangwei.md │ │ ├── wangyunfei.md │ │ ├── wangzhongbin.js │ │ ├── wangzhongbin.md │ │ ├── weiyang.js │ │ ├── wengguihua.md │ │ ├── wenyunxin.md │ │ ├── wukuipin.js │ │ ├── wukuipin.md │ │ ├── xieyuhui.md │ │ ├── yammy.md │ │ ├── yangtieming.md │ │ ├── yangxuewu.md │ │ ├── yanqingmu.md │ │ ├── yimiaoli.md │ │ ├── yinzhibao.md │ │ ├── youshilei.md │ │ ├── zhanglina.md │ │ ├── zhaokaili.md │ │ ├── zhaoxiaoxin.md │ │ ├── zhaoyinan.md │ │ ├── zhengchao.js │ │ └── zhengchao.md │ └── lesson9/ │ ├── GaoXianfeng.md │ ├── dengxy0907.md │ ├── fangqingyang.md │ ├── guowei.md │ ├── liujun.md │ ├── wayne.md │ ├── weiyang.html │ ├── wukuipin.md │ ├── yammy.md │ └── yinzhibao.md ├── public/ │ ├── libs/ │ │ └── bootstrap-3.3.7-dist/ │ │ ├── css/ │ │ │ ├── bootstrap-theme.css │ │ │ └── bootstrap.css │ │ └── js/ │ │ ├── bootstrap.js │ │ └── npm.js │ └── style.css ├── script/ │ ├── checkHomework.js │ ├── checkMyFile.js │ ├── clean.js │ ├── fs.js │ ├── package.json │ ├── run.js │ ├── scan.js │ ├── start.js │ └── updateTeam.js ├── study/ │ ├── lesson10/ │ │ ├── first-web-app/ │ │ │ ├── app.js │ │ │ ├── bin/ │ │ │ │ └── www │ │ │ ├── package.json │ │ │ ├── public/ │ │ │ │ ├── style.css │ │ │ │ ├── stylesheets/ │ │ │ │ │ └── style.css │ │ │ │ └── words.js │ │ │ ├── routes/ │ │ │ │ ├── index.js │ │ │ │ └── users.js │ │ │ └── views/ │ │ │ ├── error.ejs │ │ │ └── index.ejs │ │ └── github_index/ │ │ ├── index.html │ │ └── public/ │ │ └── style.css │ ├── lesson2/ │ │ ├── github_index/ │ │ │ ├── index.html │ │ │ └── public/ │ │ │ └── style.css │ │ ├── my_personal_info_page.html │ │ ├── sample1.html │ │ ├── sample2.html │ │ ├── sample3.html │ │ └── sample_code.js │ ├── lesson3/ │ │ ├── name_style.js │ │ └── statement.js │ ├── lesson4/ │ │ ├── build_a_human.js │ │ ├── kitchen_workflow.js │ │ ├── object.js │ │ ├── readme.md │ │ ├── sound_off.js │ │ ├── sound_off_2.js │ │ ├── sound_off_3.js │ │ └── vue/ │ │ └── index.html │ ├── lesson5/ │ │ ├── async_function.js │ │ ├── flight_schedule_1.js │ │ ├── flight_schedule_2.js │ │ ├── flight_schedule_3.js │ │ ├── indirect.js │ │ ├── indirect_call.js │ │ ├── kitchen_workflow_async.js │ │ ├── readme.md │ │ ├── type_array_sample.js │ │ ├── type_boolean_sample.js │ │ ├── type_number_sample.js │ │ ├── type_object_sample.js │ │ └── type_string_sample.js │ ├── lesson6/ │ │ ├── scan_files_async.js │ │ ├── scan_files_sync.js │ │ ├── write_file_async.js │ │ └── write_file_sync.js │ ├── lesson7/ │ │ ├── all_words.json │ │ ├── error_data.json │ │ ├── github_index/ │ │ │ ├── easy_vue.html │ │ │ ├── index.html │ │ │ └── public/ │ │ │ └── style.css │ │ ├── homework_readme.md │ │ ├── homework_sample.js │ │ ├── package.json │ │ ├── read_a_json_file.js │ │ ├── readme.md │ │ ├── sound_off.js │ │ ├── test_data/ │ │ │ └── data.json │ │ └── write_a_json_file.js │ └── lesson9/ │ ├── chain_function_call.js │ ├── github_index/ │ │ ├── index.html │ │ └── public/ │ │ └── style.css │ └── readme.md ├── topics/ │ ├── Git实战笔记.md │ ├── JS函数.md │ ├── JavaScript的语法学习指引.md │ ├── MAC-Terminal-command-list.md │ ├── Win-Command-list.md │ ├── callback函数的设计学.md │ ├── js重要语句.md │ ├── 两种定义函数方式的差异.md │ ├── 了不起的axios(http).md │ ├── 代码就是由这些组成的.md │ ├── 作品征集.md │ ├── 函数 - 定义完就执行.md │ ├── 匿名函数使用技巧.md │ ├── 变量命名简明技巧.md │ ├── 同步函数的两种返回结果的方式.md │ ├── 图床教程.md │ ├── 在Heroku上快速部署自己的JS项目.md │ ├── 如何从主项目更新fork的项目.md │ ├── 如何在终端执行代码.md │ ├── 如何查看git push和pr的提交结果.md │ ├── 安装nvm.md │ ├── 定义变量.md │ ├── 相对路径.md │ ├── 第一个webapp.md │ ├── 第一次pull-request.md │ ├── 第一次pull-request错误汇总.md │ ├── 第一次使用Git.md │ ├── 第一次使用JSON.md │ └── 让github-wiki变成图床.md └── webapp/ ├── package.json ├── src/ │ ├── app.js │ ├── bin/ │ │ └── www │ ├── config/ │ │ ├── index.dev.js │ │ ├── index.js │ │ └── index.pro.js │ ├── middleware/ │ │ └── courseInfo.js │ ├── public/ │ │ ├── libs/ │ │ │ └── bootstrap-3.3.7-dist/ │ │ │ ├── css/ │ │ │ │ ├── bootstrap-theme.css │ │ │ │ └── bootstrap.css │ │ │ └── js/ │ │ │ ├── bootstrap.js │ │ │ └── npm.js │ │ └── stylesheets/ │ │ ├── anim.css │ │ ├── github-markdown.css │ │ └── style.css │ ├── request.js │ ├── routes/ │ │ ├── homework.js │ │ ├── index.js │ │ ├── sayToTeacher.js │ │ ├── studentWorks.js │ │ ├── topics.js │ │ └── words.js │ └── views/ │ ├── _head.ejs │ ├── _header.ejs │ ├── _nav.ejs │ ├── _slider.ejs │ ├── error.ejs │ ├── homework.ejs │ ├── homeworkList.ejs │ ├── index.ejs │ ├── sayToTeacher.ejs │ ├── sayToTeacher2.ejs │ ├── studentWorks.ejs │ ├── topics.ejs │ └── words.ejs └── test/ ├── routes_api.test.js └── routes_page.test.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # Ignore Mac OS desktop services store .DS_Store package-lock.json node_modules dist .vscode script/result script/teams.md ================================================ FILE: README.md ================================================ ## 美好的回忆 该项目记录了一群小白学习js的过程,现封存该项目供所有人回忆。 感谢大家的努力 请[点这里](https://js.7xinsheng.com/)访问我们的家!  ================================================ FILE: _config.yml ================================================ theme: jekyll-theme-hacker ================================================ FILE: homework/lesson1/Autumn.md ================================================ 第一节课老师运用银行开户的类比帮助我们理解JS(或者说是理解编程)。 ###### 1.银行(内部服务➕核心服务)—> 运行环境(内置库➕V8引擎) ; 客户—> 代码 开户的环境是银行,在这个环境中客户可以得到内部服务以及核心服务,通过这两种服务客户可以成功开户。 同样的,对于代码来说,其在运行环境中可以运用内置库的服务、V8引擎服务处理代码,最终让代码被成功执行。在JS中有两类运行环境,分别是浏览器环境和Nodejs环境。这两种环境的内置库、第三方库不同,在写程序时一定要明确自己处于哪种环境,不要弄混。 ###### 2.核心服务(预处理➕执行)—> V8引擎 (=编译器/解释器) 为了给客户开户,银行工作人员需要对开户信息进行预处理(审核信息准确性)与执行(审查信度)。为了执行代码,V8引擎做的就是让代码被识别被执行。客户开户不必考虑工作人员如何审核信息,小白程序员写代码也不必考虑V8引擎内部如何运行。 编程语言分为编译型语言与解释型语言: 编译型语言将所有信息都预处理后再执行,运行效率高(电脑)开发效率低(程序员) 解释型语言预处理一条信息执行一条信息,运行效率低开发效率高 JS属于解释型语言 ###### 3.内部服务(复印、拍照、查询逾期)—> 内置库 ;第三方服务(公安部门信用鉴定)—> 第三方库 客户开户之前需要做许多准备工作,在银行之内可以复印、拍照、查询预期…在银行之外需要去公安部门开具信用证书…只有运用这些服务做好准备工作才能进行开户。写代码也需要环境内、环境外的内置库、第三方库提供多种多样的服务,这样代码运行时才能种种功能。 在理解了JS的大致框架后老师提供了学习的方向。因为小白程序员不必深究V8引擎内部如何运行,所以在学习的过程中只需要把精力放在如何运用编程语言以及内置库、第三方库写出代码即可。 * 一开始要练习编程语言,熟练语法。 * 之后要熟悉内置库、第三方库的各种服务,让代码能有更多样的功能。 * 最后要不断比较各类服务,找到实现各类功能的最优解决方法。 这个进阶路径很像准备考试的过程,一开始熟练基本概念定理,然后在题海中习得多种解题方法,最后化繁为简总结类型题的最佳解法。 ================================================ FILE: homework/lesson1/ElizabethZhouli.md ================================================ **#** **learning-javascript lesson 1** **1. 类比代码执行流程** 方式:用“银行为用户开户这一”具象业务架构“一对一抽象成“JS运行环境框架“,框架包含:JS运行环境[浏览器运行环境(v8引擎+内置环境)+Nodejs运行环境(v8引擎+内置环境)]——第三方库——JS代码 **2. 运行环境** 包含浏览器运行环境和Nodejs运行环境 **3. V8引擎** 核心:用来执行代码 **4. 编译器/解释(执行)器** 是V8引擎的组成部分,用来处理和解析代码 **5. 内置库** 是运行环境所提供的一组服务,用来实现代码的功能 **6. 第三方库** 付费或开源的各类服务于JS的工具库 **7. 学习JS的方向** 有难度:变化快+无边界,但也有套路从小白到高手: "掌握编程语言,用编程方式调用服务来完成你的需求"—— “了解和掌握重要的服务能力,使其能服务你的业务”—— “善于比较服务/技术之间的差异性,用最好的方式实现自己的业务”。 加油! ================================================ FILE: homework/lesson1/GaoXianfeng.md ================================================ ## JavaScript 第一课总结 ### 现实生活场景举例类比 JS 代码执行流程及相关概念 客户去银行办理业务,在正式办理业务前填写相关资料,随后将填写好的资料提交给银行办理业务工作人员,工作人员对已填写好的材料进行审核,然后将办理结果提交给客户,银行根据客户自身情况将客户划分为不同等级,如:普通客户、VIP客户等。银行为更好的服务客户,在银行内部提供相关服务,如:身份证复印等。工作人员审核客户提交资料时除审核资料格式填写准确性外,有可能通过调用外部系统检查客户身份合法性等。 以上客户在银行办理业务流程即可理解为 JS 代码的执行流程。即客户填写资料(编写代码),将资料提交给银行工作人员(编辑器与解释器),银行工作人员对材料进行审核(编辑器与解释器解析执行代码),将办理结果返回给客户(返回代码结果)。 银行不为同等级客户办理业务可映射为 JS 运行环境,为普通客户办理业务(浏览器运行环境)、为VIP客户办理业务(Nodejs 运行环境),每一种业务(运行环境)均包括银行内部的服务(内置库)与办理业务(V8引擎,进行预处理与代码执行)。 银行工作人员调用外部系统核实用户身份合法性,即可视为 JS 调用第三方库完成相应功能。 ### 学习 JS 方向 #### 1. JS 学习困难原因:变化快、无边际 #### 2. 学习上升途径 初学阶段:***掌握编程语言***,用编程方式调用服务来完成你的需求; 提高阶段:***了解与掌握重要的服务能力***,使其能服务你的业务(了解内置库与第三方库使用); 进阶阶段:擅于比较服务/技术之间的差异性,***用最好的方式实现你的业务***; 与现自己情况对照,目前刚刚到达提高阶段,需要继续深入了解开发语言的内置库与第三方库使用 ================================================ FILE: homework/lesson1/Huang_Biling.md ================================================ ## 作业_JavaScript编程入门_第一节 1. 类比代码执行流程 代码,是人的需要转化成的、对智能机械的命令。执行命令需要资料和数据。得到资料数据后,还要先将它们审核通过后再送去执行,为的是不让错误卡住执行流程,导致混乱。 命令,可视作“回家休息”,首先,人要进门。资料数据是“门匙”,预处理是“门锁”进行审核,门匙正确,人才可以进行入门的动作。门匙在现实中是已提前由制锁工厂造好。这看起来是外部完成,但内外是相对的。这是预处理(内置服务)。“社会协作”可以看作很多命令“运行环境”,而“家”是V8引擎,比如做饭命令、看电视命令、上网命令,在家里可完成。这些命令需要电饭煲、电视、上网路由、电脑或手机等“编译器”。而这些设备的零部件或其原材料将由厂家的供应商提供,供应商即“第三方”;如果在超市购买的,超市也是“第三方”。银行的“设备”和“第三方”同理(到底是不是呢...)。那么,这个语境里最初的代码(命令)是什么...可能也许大概是人类的生活需要吧...好像圆回来了... 先这么理解着。理解不对的,后面运用时再调整贯通。 2. 运行环境 包括内置库和V8引擎,提供代码从输入到执行完成所需的全部资料、数据、功能等等。 3. V8引擎 是指真正执行代码命令,使计算机、机器完成任务的地方。 4. 编译器/解释(执行)器 将代码转换成机器可以识别的语言的(地方)。比如,电视遥控器将我们按频道的动作,转换成电视机能马上能识别(选台)的语言。 5. 内置库 提供执行命令所需的数据。在“进门”这个语境里可包括门匙,或将人送回家的交通。 6. 第三方库 所有设备的上游供应商或设备流通相关的商家。 7. 学习JS的方向 因为“变化快”(是指语言一直升级吗?视频没看到的落后份子伤不起),所以要让自己经常了解最新的语言发展,比如常看最新的开源项目。 因为“无边际”(因为是面向对象的语言,所以随着社会的快速变化,对象和对象间的关系也不断变化,JS的运用也就无边际了吗?),那不会那么闷了?随时都可以寻找对象,想办法将JS用上。随时都要想办法改进。(也许是我想太多了) 另外, 对“进阶”的理解是,“根据需求的差异性和可行性,灵活运用”。 ================================================ FILE: homework/lesson1/Jaykey.md ================================================ ### 基础-第一课 ###### JS运行环境: 1. 浏览器 2. Nodejs 都含有V8引擎(对代码进行预处理)和内置服务(不同环境有不同)。 核心是**“内置库”**,如何调用会输出什么结果。 ###### Javascript是解释性语言 一边编译,一边执行。**开发效率高,运行效率低**   ###### 用自己的话解释概念: > 运行环境:代码的运行环境,分为浏览器和Nodejs两种 > > V8引擎:运行代码的黑箱,目前只需要知道输入什么能输出什么 > > 解释器:对代码的解释,让机器能够读懂js代码 > > 内置库:js内置的代码库,js的基础和共同点 > > 第三方库:个人或者公司开发的使用js的方法 ##### 目前的学习目标:掌握编程语言  ------ 小结: 1. JS的运行环境是很灵活的,能直接在浏览器中运行。 2. 一大特点:**边编译,边执行**,使得js的运行效率高,但是运行速度慢。 3. 需要知道不同的运行环境会调用不同的库,但是共同点是**JS内置对象** 4. 目前的学习目标:掌握JS编程语言 ================================================ FILE: homework/lesson1/Learner-Chen.md ================================================ Javascript第一次课程总结 第一次上课,主要是对于编程感兴趣。现在社会的互联网、人工智能持续火爆,也是大势所趋。所以一只很感兴趣。看到新生大学改版后开课,就第一时间报了名去学习。 徐老师讲解JS时,通过对生活中常见的银行开户流程来讲解,通过一步一步引导,初步建立起有关Js代码执行流程的意识。类比优化后的银行开户流程,了解JS代码运行环境,JS运行环境主要分为前端-浏览器运行环境和后端-Nodejs运行环境。但是不一样的内置服务,运行环境之间有了显著性的差异。V8引擎是运行环境中执行代码的阶段。 JS语言是解释性语言,是边编译边执行同步进行,和银行开户最初始阶段相同。不像C/C++语言,是编译型语言,先编译,再进行解释执行。这点是不相同。因此二者在处理效率以及开发效果上迥然不同,各有特色。 内置库与第三方库是有关联的。内置库好比家庭内部自有的图书室,第三方库是外界社会共同开发共同享有的社会公共图书馆。浏览器和Node内置库方面有很多不同,但二者都有JS内置对象。 JS方面,徐老师给我打开了一扇门,当下和徐老师好好学习,一步一步摸索练习。养成自己的编程思想,有自己的独特性。 ================================================ FILE: homework/lesson1/LiaoYuemin.md ================================================ ## Story of Lesson 1 我有一个做运营的朋友,她一直觉得编程很重要,但是却没有多少兴趣去学。其实我也是。但是作为一个软件行业的测试者,还是觉得应该学一些编程的东西。 第一节课后跟她分享上课的感受,我跟她说第一节课的作业需要用markdown写一篇总结。于是有了下面的这段对话。 *** 朋友:我一直没看懂**markdown**是个啥玩意儿? 我:其实跟word一样,你要实现某种文字格式,word里面可以点击相应的功能键来实现,markdown相当于是把你点击的动作编成了可见的语法,最终实现的效果是一样的。比如你要把“朋友”两个字加粗,word里面你是选择“朋友”两个字,然后直接点击加粗键就可以实现,markdown里你可以前后用两个*号把“朋友”两个字括起来,这两个字就加粗了。 朋友:这就是语法,对吧? 我:对的。 朋友:开发里面经常说的运行环境是什么鬼啊? 我:所谓**运行环境**就是实现输入代码输出结果所需要的环境。运行环境包括V8引擎和内置库。 朋友:**V8引擎**是什么? 我:我理解的就像一艘船的发动机,没有发动机船就开不起来,没有这个V8引擎,代码就没办法运行。 朋友:内置库又是什么? 我:**内置库**就是数据库,就像医院的不同科室。一个科室就是一个库,这些所有库加起来构成了医院这个大环境。哦,对了。JS运行环境有浏览器运行环境和Nodejs运行环境之分,不同的环境,内置库是不一样的哦。就跟不同的医院,科室不同一样。但是老师说浏览器运行环境和node运行环境中内置库里有一点是相同的。 朋友:那是什么? 我:JS内置对象。这个我还不是很懂是什么东东。 朋友:那整个代码是怎么运行的呢? 我:那要看它是**编译型语言**还是**解释型语言**咯。C/C++就是编译型语言,他们的运行流程就先是代码输入,然后编译器进行编译,再把编译好的代码交给执行器执行,最后输出结果。而JS是解释型语言,就是边输入边编译的模式,编译器承担了编译型语言里面编译器和执行器的双重工作。相对编译型语言,解释型语言因为流程比较简单,代码执行率比较高,但是也因为编译器承担了更多的工作,所以开发效率比较低。 朋友:哦。那就是内置库和你说那个发动机就构成了运行环境对吧? 我:嗯。但是在实际运行中有可能还需要**第三方库**。 朋友:第三方库又是什么? 我:这就好比你要做饭,这个动作可以在你家厨房完成,但是材料你需要去超市购买,这个超市就是第三方库。相当于别人已经完成的代码,你可以使用它来节约时间和精力,提高开发效率。 朋友:所以你知道怎么学习编程了嘛。 我:我理解的就是你要写好代码就得学会调用内置库和第三方库,就是说你不仅要学会编程语言,并且要对内置库和第三方库非常了解,还要在学习中多比较代码的差异,比如为什么这里要这么写,为什么在另外一个地方写法又不同,就是这样在比较中学习比较好。 朋友:怎么和你讨论了一下突然觉得编程很好玩儿了呢? *** 其实不知道理解得对不对,但是要知道在这节课之前我什么都不知道,markdown都是看到作业后现学的。嗯,这大概是我上过的所有网课上面最有效的一节了。 ================================================ FILE: homework/lesson1/Liuzhengchun.md ================================================ ##第一次作业 距离第一节课过去好几天了,终于抽出时间来写作业了,作业的主题就是理解徐老师在课上讲的那几个概念,用自己的话把它说出来。 这么久才交作业甚是惭愧,第一节课的内容也有些模糊了,不过我会迎头赶上的,这里先给自己鼓励一下,也谢谢徐老师在作业区的每一个回复,这也是促使我继续学习下去的动力之一。 还是按照老师在作业区留下的概念逐一论述一下我的理解,理解不一定全对,但是随着学习的逐渐深入,我的理解会不断更新,朝着正确的方向前进。 老师在课上用一个银行开户的流程来类比编程中的诸多概念。让我印象深刻的不是类比的概念多么容易理解,事实上我当时还是处于懵逼的状态。让我印象深刻的是老师一幅幅流程图,通过简单的箭头指示和图例,清楚的对比了前后流程的优劣。 1. 类比代码执行流程。银行开户需要提交申请,柜台按照规则进行审核,符合要求则通过,不符合则退回,代码运行也是如此,输入代码,然后执行,符合则输出结果,不符合则报错,一长串的字符,看得眼花缭乱。虽然知道执行的一般流程,但是不知道执行的差别,比如说编译型和解释型,我要学的JavaScript就属于解释型的,它是在执行的时候就按照一定的规则解释,是边执行边解释。 2. 运行环境。运行环境是我一直不能理解的,日常生活中的环境指的是除了自己之外一切互相影响的因素,对于另一个不同的人来讲,你自己也成了环境的一部分。课程提到了两个环境,一个是浏览器的运行环境,一个是JS的运行环境。它包括了V8引擎,第三方库,内置库等,每一部分都有自己的功能。不同的运行环境下产生的结果不同,或者结果相同,但是执行过程不同。 3. V8引擎。这个我就把它跟车的发动机类比了,车子是靠发动机才能启动的,启动后的速度远远大于人力和马拉车。代码执行也需要这样一个部件吧。 4. 编译器/解释器。这是代码需要提交到的地方吧,让编译器审核一下,让解释器执行一下。 5. 内置库,就是运行环境自带的库,代码可以直接利用它进行最基本的调用,方便使用者进行编程,它的使用都是最基本的,必不可少的。 6. 第三方库。这是对内置库的一个补充,可以让使用者进行个性化的编程,找到自己需要的方便的工具,但它有可能不是必不可少的。 7. 学习JS的方向。JS的世界才刚刚推开大门的一角,这个世界长什么样都不清楚,但是我想当我需要它帮我实现我的想法时,我能知道怎么使用它。 ================================================ FILE: homework/lesson1/Rachel.md ================================================ ### 一个总结 如果用一句话来总结第一节学的内容,我想是用**银行开户流程**这个类比,非常清楚地阐述整个**业务架构的模式**,以及其中的**重要概念**。 我非常喜欢最后的总结: “开户环境提供集**预处理、执行**于一体的核心业务处理单元,同时还提供了**内置服务**方面用户的业务办理。 围绕开户业务,会有一系列**第三方服务**供用户使用,以满足开户业务的需求。“ 这一句话,让我脱开零星的概念,从整体上去理解JS整个框架结构。 ### 几个概念 **运行环境**:分两类,分别是是浏览器运行环境和NodeJS运行环境 **V8引擎**:对代码进行预处理和执行,对于初级阶段不需要了解V8引擎具体的操作流程; **内置库**:其中有网络库、日志库、JS内置对象等等 **第三方库**: ### 编译型or解析型? 编译型:需要一个专门的编译过程,通过编译器翻译成机器语言。特点:运行效率高,开发效率低; 解析型:一条语句边翻译边执行。特别:开发效率高,运行效率低。JS ### 运行环境 用婴儿喝小学生的生活环境来类比JS的运行环境,浏览器环境和NodeJS环境不能混淆。 两个环境有一个共通的内置库:JS内置对象。 ### 该怎么学JS/怎么提高/怎么进阶? “**掌握编程语言**,用编程方式调用服务来完成你的需求” ——基础 “**了解和掌握重要的服务能力**,使其能服务你的业务”——学会第三方库 “善于比较服务/技术之间的差异性,**用最好的方式实现你的业务**”——找到解决问题的更好方法 ================================================ FILE: homework/lesson1/Risexie.md ================================================ 第一节课总结 =========== * ### 类比代码执行流 老师使用了一个在银行创建户口的例子,为我们说明了在js当中代码的执行流程,帮助我们理解“在终端输入代码”,到“终端返回我们结果”这样一个过程,是如何实现的。 我们在终端输入代码,相当于我们在银行股柜台填写个人信息,但是开户的要对我们的信息进行多次加工,我们的信息需要被添加、复制、粘贴、打印,非常麻烦。这个时候银行会有一个专员帮助我们来执行,给我们提供服务。所对应的也就是“运行环境”给我们提供的内置服务。 在个人信息被处理完毕,填写到所需表格之后,我们银行的开户人员会再核对一遍我们所提供信息的完整度和正确性,然后真正地帮助我们开户。也就是在运行环境里面的v8引擎会对代码做的事情。 * ### 运行环境 代码在被执行时所处的环境,把我们自己比做代码。就好像你同样是去餐厅吃饭,民工饭堂需要自己端着碗去让服务员给我们夹菜,但是米其林三星餐厅则会把菜摆的美美地放上我们的餐桌。我们同样是为了达成“把肚子填饱”这个目的,但是我们身处的环境不一样,达到目的的方式也不一样。 * ### V8引擎 不要以为电脑现在能够做这么多事,能够执行这么多操作,就代表电脑很“聪明”。其实电脑能够接受的信息就是0和1,而电脑现在能”看懂“我们在终端敲的英文:“`git add.` , `git push -m`等指令是因为编译器已经帮我们把代码编译成了电脑能够“看得懂”的01010,电脑才能够执行我们的代码。而V8引擎,就包含编译和执行两个功能。 * ### 解析器和编译器 解析器能够一边编译代码一边执行,能让我们在敲完代码之后马上看到相对应的效果。编译器只能编译代码之后,再把编译后的代码送到执行器,不利于开发。 * ### 内置库 同样把民工饭堂和米其林三星餐厅作为例子,民工饭堂的“内置库”是一个简陋的厨房,大堂里面给食品加热的设备,服务员可以从设备中,给我们打饭。 米其林三星餐厅的“内置库”是一个专业,宽敞,明亮的厨房,从厨房上得上菜处到客人餐桌有一个专业的菜品传递链。菜从平板锅做好之后,还要经过食品检测员,再传递到传菜员最后送到我们的餐桌。 * ### 第三方库 想象有一家餐厅,食物是从自己的厨房制作的,但是大堂的服务却*“外包”*了出去,是从另外一家公司负责的。而这家公司所提供的环境和人手,就是“第三方库”。 * ### 学习JS的方向 我们敲代码这个行为,其实就是为了让一个软件能够实现我们所需要的功能。一开始我们什么都不懂,需要去学习实现功能的相关代码。好不容易才把我们所需的功能实现。 后来我们了解也熟悉了实现功能的方法,但是随着学习的深入,我们了解到了实现同一功能不止一种方法。我们可以使用不同的语言、环境、第三方库,去帮助我们实现同一功能,又因为不同的语言和环境。实现功能的方式都是各不相同的,我们需要了解他们的不同,学习不同的实现方法。 到最后我们所有的方式都玩了一遍,我们了解的不同方式之间的差异和优劣。我们可以衡量不同方式的利弊,去选择一种最“合适”的方式,去实现我们的需求。 ================================================ FILE: homework/lesson1/SunBo.md ================================================ 第一次作业 # 类比代码执行流程 自己是第一次接触真正的编程,徐老师课上的类比的方式不仅印象深刻,而且感觉是从底层上告诉了自己,JS或者说一种编程语言到底是怎样的一种存在。自己以前看过一些平面设计软件的教程,html,css一些最基础的内容,但我觉得自己学习一门知识最重要的是在开始弄明白,这门知识能用来做什么,我们平常直观看到的一些“样子”,“功能”到底是通过什么工具连接的。 >在类比代码的执行流程中涉及到了很多完成“JS”这件大事中需要的一些“工具”,这个过程就像我们在银行办理一个开户过程一样,需要一个环境,需要项目发起者(申请人),核对,执行,申请者与窗口的交互,最终出结果。接下来,在这个过程中我们会遇到一系列"服务“,“人员”,和“工具”... # 运行环境 >如果你的银行建在田野的账篷里这种环境,你再聪明也办不了业务。银行办理业务你也会遇到不同的环境,比如普通客户环境,椅子冷。VIP客户环境,椅子柔软温暖。 代码的执行过程肯定需要一个环境,十万个冷笑话中的河神会告诉你“年经的工程师啊,你是需要在浏览器中运行呢,还是在NODE运行呢?” 浏览器和node就是我们代码的环境,简单的可以理解为一个对应前端,一个对应后端。 # V8引擎 * 我是小白,这么高深的V8引擎,小白先了解就好喽。学开车,前期就先不要考虑发动机的原理。 >当你去银行办理业务时,会有大堂工作人员帮你填单子,初步核对你的条件,信息,单子格式等,有没有写错字;窗口里面的工作人员帮你通过银行的系统等再次审核你,录入你的信息,对信息进行解释,执行你办理的业务。 * V8就相当于解释/执行器,核对,翻译,执行整个业务,把结果通过窗口送给我们。 # 编译器/解释(执行)器 * 编译器相当于一个预处理的过程,就像在银行输业务时,大堂工作人员的职责一样。 * 解释(执行)器相当于窗口内的工作人员,正式开始处理、执行你的业务,并要给你一个结果。 * JS语言是将两个过程放在一起进行的。 # 内置库 * JS内置的 * JS语言学习中主要就是对内置库和第三方库的使用。 * 是小白重点学习,主要学习的部分。 # 第三方库 * JQuey就属于第三方库,反正以前一直感觉这个东西好像挺酷似的。 * 还要几个课上讲的库,因为笔记在家,现在回忆中只能想起JQuery了。 # 学习JS的方向 >* 用代码实现相应的小需求 >* 会比较不同库,不同功能如何搭配才能最优 >* 基础知识自己最好在业余时间也进行相当的补充,更好的完成 ================================================ FILE: homework/lesson1/WangChangQing.md ================================================ # 第一节课总结 form 王长庆 因为之前一直在忙别的事情,所以直到这两天才开始疯狂赶进度。好在课程开始之前有做过徐高阳老师布置的准备作业,所以只需要重温一下,便可以上手了。 看完了第一节课的视频回放,感觉似乎并不是特别难理解。我把我的想法和理解写一下,不知道对不对,还请高阳老师指正。 ## 代码是什么? 所谓代码,实际上就是程序员与计算机之间沟通、交流的时候,所使用的一种语言。因为计算机是听不懂一般意义上的中文或者英文的,所以就需要一门特殊的语言,让计算机可以知道程序员想要它做什么,怎么做。 计算机很强大,它的硬件(比如CPU、硬盘)决定了它的计算能力、反应速度、记忆力要比我们人类强得多,根本不在一个数量级。所以,让计算机来执行计算任务,可以大幅度提高我们的工作效率。 那么代码就是一种程序员和计算机都懂、都能理解的语言,也是计算机和程序员交流和沟通的媒介。 通过代码,计算机得以调用它的硬件设施,来完成程序员要求它完成的任务。程序员也可以根据计算机的反馈,来知道任务出现了什么问题、得到了什么结果。 ## 计算机如何工作? 代码发展到今天,已经非常完善和复杂了,当然,也非常高效和强大。 程序员首先将一行行代码输入特定的终端,代码会首先到达对应的“后台”,也就是“编译器”,进行预处理和解析。因为复杂的代码需要先进行分析、校对和优化。 既然是一门语言,就会有词汇、语法、词法,就像中文和英文一样,错别字和病句是无法被别人所理解的。因而需要先确保这些代码通顺、流畅、可以被计算机读懂。 解析之后,代码会达到“执行器”,这时候,计算机就会根据它所理解的内容,来调动它的硬件设施和强大的计算、处理能力,来完成程序员需要它完成的任务。这就叫“执行”。 执行完毕之后,计算机这一阶段的工作也就完成了。程序员可以根据计算机输出的结果,来进行下一步的操作。 当然了,实际工作当中,为了提高效率和完成更加复杂的任务,编程语言的“运行环境”中还包含了很多“内置库”。这一点我还没有太多地接触,不过我个人理解应该是说,很多常规性的工作可以用模块化的方式来解决。就像物理、数学里面有很多公式和定理一样,就不用每次都证明一遍了。 ## JS有何特点? JS有一个很有趣的特点是,其他的编程语言提交之后,都是先解析,再执行,而JS是一边解析,一边执行。 就像大多数人都是先盛饭,再吃饭,而JS是一边盛饭,一边吃饭。虽然有点不太雅观,但是不失为一种很有效率的“吃饭”方式(๑*◡*๑) 。 因此,JS的开发效率高,但是运行效率低。一边盛饭一边吃饭的话,当然可以很快地品尝出饭的滋味,但是就没有盛好饭之后再大口吃更豪爽,更痛快。 ## 学习JS的方向 就像出门旅行一样,刚开始的时候,我们只能徒步、骑自行车。又累又慢。 慢慢地,我们学会了坐公交车、打车,甚至坐火车、坐飞机、坐宇宙飞船。这个时候已经不是我们自己在“劳动”了,变成了使用别人的服务,来让我们更快地到达更远的地方。 最后,我们还要知道各种旅行方式之间的差异,用最好的方式去达到我们想要去的地方。比如中远途旅行的话,遇上天气不好的时候,高铁是比飞机更好的选择。 ================================================ FILE: homework/lesson1/Wei.md ================================================ # 小白学JS 第一课总结 20170811 ### 1.银行开户类比JS代码执行流程 银行开户流程 * 填写申请单 * 审核 * 发卡 具体开户业务 1.开户环境:提供一组服务,该服务包含接受申请、检验申请单信息和核对资格。提供内置服务和核心服务。 * 内置服务:为满足用户填写订单时提供的一组内部服务。 * 核心服务:涵盖预预处理和执行的服务,是银行的核心业务。预处理:在真正执行开户前进行信息检查的处理过程,以保证执行处理的效率。执行:执行开户操作的过程,操作完成后并返回想要的开户结果。 2.第三方服务:围绕开户服务,会有一系列银行之外的第三方服务供用户使用,以满足开户需求。 *JS运行环境框架* * JS运行环境对应银行开户环境。 * JS代码对应用户。 * 第三方服务对应JS第三方库,来满足JS代码更多的需求。 *** ### 2.运行环境 JS的运行环境由内置库、V8引擎组成 JS有两大类运行环境: * 浏览器环境和Nodejs环境:两者最大的区别在于内置库和第三方库的不同。 *** ### 3.V8引擎 在JS中,V8引擎是把开发人员写的 JS 代码转换成高效、优化的代码的解释/编译器,负责预处理和执行,具体处理过程处于“黑箱”阶段。 *** ### 4.编译器/解释(执行)器 * 编译型语言:代码需要一个专门的编译过程,将代码翻译成机器语言,其优点是运行效率高,缺点是开发效率低。 * 解释性语言:代码边执行边翻译,优点是开发效率高,缺点是运行效率低。 *JS属于解释性语言,代码输入后,由编译器/解释器进行分析语法、分析词法、分析语义、优化代码、解释代码、执行代码。* *** ### 5.内置库 JS内置的一系列打包好的工具,其类型众多、功能丰富,帮助开发者简化和优化开发过程。 *** ### 6.第三方库 和内置库的功能一样,帮助开发者简化开发过程,优化产品,但并不属于JS内置,需要额外下载。 ### 7.学习JS的正确姿势 * 掌握编程语言,用编程方式调用服务来解决问题 * 了解和掌握重要的服务能力,使其能服务我们的需求 * 比较服务/技术之间的差异性,用最好的方式实现你的业务 *** *撸起袖子就是干,紧跟老师步伐,记录错误,有报错问google!* ================================================ FILE: homework/lesson1/WuGaoxing.md ================================================ 运用下面这些关键词,把你知道的写出来 1. 类比代码执行流程:医生诊治病人的过程,学生上学的顺序,社会运行的次序 2. 运行环境:由不同事物组成的特定套路,环境不同 套路不同 3. V8引擎: 一个隐藏很深 较底层的平台 提供机器与代码的交互 4. 编译器/解释(执行)器 : 对代码转换成机器可识别的二进制,机器安装二进制执行 5. 内置库:官方内含的套件礼包,较正式和常用 6. 第三方库:非官方定制化的,超级大礼包,无好坏之分,全看你是否能用到 7. 学习JS的方向:入门 多问自己什么最重要,不能钻牛角尖搞研究。实用为主。 ================================================ FILE: homework/lesson1/XGunn-lesson01.md ================================================ \# 第一课总结 \## 1.类比代码执行流程 以银行受理客户业务流程类别代码执行流程。 \## 2.运行环境 JS运行环境包括浏览器运行环境和Nodejs运行环境,运行环境是用来处理和执行代码并输出结果。 \## 3.V8引擎 V8引擎高效执行代码,Google开发 \## 4.编译器/解释(执行)器 编译器用来分析词法、语法、语义、优化代码 解释器用来解释代码、执行代码 \## 5.内置库 js自带的工具,可以直接拿来使用。 \## 6.第三方库 外部机构提供的工具,可调用。 \## 7.学习JS的方向 学习编程语言,解决业务需求。 注意辨析工具差异。 ================================================ FILE: homework/lesson1/ZhengChao.md ================================================ ## JavaScript Lesson1 学习心得 #### JS两大构成部分 ##### JS代码 1. ###### 两个概念:编译型语言(比如C,C++)和解释性语言(JS) 2. ###### JS代码属于解释性语言 3. ###### 从解析器看来,要处理的代码不仅包括JS代码,还包括把内置库,第三方库服务整合的代码集合 ##### JS运行环境和第三方库 1. ###### 两大运行环境分别是浏览器和NodeJS - ###### 浏览器运行环境可用于前端 - ###### NodeJS运行环境可用于后端 2. ###### 单个运行环境的构成: - ###### V8引擎:编译解析代码 - ###### **内置库** - ###### **第三方库** ================================================ FILE: homework/lesson1/anjiancai.md ================================================ # 第一次学习Javascript总结 标签(空格分隔): 未分类 --- #类比银行开户流程环境讲解程序运行环境 通过不断优化银行开户的步骤,最终完成一套设计完美的流程。 ![优化后的开户流程][1] 整个流程设计两大主体部分:用户和银行,用户和银行之间涉及三大步骤:请求服务、输入和输出。而银行内部拥有建立的开户环境,开户环境中包括内置服务、预处理和执行,其中内置服务部分是为了预处理和运行做的前期准备,预处理是为执行部分顺畅运行做的检查工作,而执行部分是开户的核心部分。 ![构建业务架构][2] 银行根据用户的不同分为普通用户和VIP用户,其实每类用户包含相同的步骤,开户环境分别抽象为内置服务和业务核心两部分,而业务核心就打包合并了上述中的预处理和执行部分。除此之外还需要第三方服务,因为自己的环境中需要链接外部已经建立的优秀流程部分,需要的时候只需调用即可。 ![JS运行环境框架][3] JS运行环境框架与上述银行开户的业务架构极其相似。JS代码如同用户,JS运行环境如同银行环境,浏览器运行环境和Nodejs运行环境如同银行中的两类用户的环境,而每类环境中V8引擎负责业务核心。值得注意的是,两类环境中都存在内置服务和第三方库,但是各自的内容都不相同。 #编译型语言和解释型语言 编译型语言(如C语言和C++)是先编译后运行,需要一个编译代码的过程,通过编译器翻译成机器语言。 特点:运行效率高;缺点:开发效率低。 ![编译型语言][4] 解释型语言(如JavaScript)是边编译边运行,每一句的代码都是边编译边运行的。 特点:开发效率高;缺点:运行效率低。 ![解释性语言][5] [1]: http://wx3.sinaimg.cn/mw690/95a79662ly1fihd5trymgj20mn0irdis.jpg [2]: http://wx3.sinaimg.cn/mw690/95a79662ly1fihd5uef3qj20k70d9wg0.jpg [3]: http://wx4.sinaimg.cn/mw690/95a79662ly1fihdw40385j20k20dfjt3.jpg [4]: http://wx4.sinaimg.cn/mw690/95a79662ly1fiheed1dt0j20kx0cyq4j.jpg [5]: http://wx3.sinaimg.cn/mw690/95a79662ly1fiheedv6zij20mp0bomyq.jpg ================================================ FILE: homework/lesson1/baoguoqiang.md ================================================ #类比代码执行流程 首先引入生活中在银行开户的这么一个流程,讲解了在开户过程中所需求的种种,我们把这些种种叫做开户环境;一步一步进行优化处理,最后达到满意的效果; 从这个生活中的例子引导到javascript的运行环境; #运行环境 javascript的运行环境分为:浏览器运行环境;NodeJS运行环境 这两种运行环境都是由内置服务和V8引擎,第三方库组成 #V8引擎 V8引擎就是运行环境中的一个预处理 # 编译器/解释(执行)器 在javascript的运行环境里,编译器和解释器是合二为一的,一边编译一边解析; #内置库和第三方库 这两个库我们在编程的时候都是要学会调用的,要熟练掌握技巧 #学习JS的方向 个人是小小白,之前从未接触过编程,刚开始的时候,直播还能看的懂,到作业部分简直就是蒙圈,还好有老师写的非常详细的文档, 一开始就是一点方向也没有就像无头的苍蝇乱飞,文档要仔仔细细的看才可以,边看边实操效果更好。 在这里也非常感谢王云飞同学的帮助的鼓励,非常耐心的去指导我这个小小白。 由于种种原因到现在才交第一次的作业,可能是最后一个提交的,但是我不想放弃,现在一有时间就是在看文档和书籍,谢谢老师的指点 ================================================ FILE: homework/lesson1/caijinpeng.md ================================================ ## 第一次作业 ### 提交人:Marshalcy #### 代码执行环境 我用过调用各种库(内置库和第三方库)写好我的代码后,打包成工程代码,发给解释器;这个过程好比是我去银行开户,通过大堂经理等人的帮助后,将我的个人信息完整准确的填写在申请表上,然后交给银行柜台员工,如果信息表信息无误,则通过申请,柜员发卡给我;如果还有错误,ta会将信息表给我,告诉我哪里错了,需要重新填写,好比解释器报错。 #### 运行环境 好比是饭店的后厨,里面包含洗菜、切菜、炒菜的,最后将炒好的菜交给前台服务人员。 #### V8引擎 后厨工作人员,炒菜的,将切好的菜交给他,他炒好了装盘拿给你或者炒糊了,也给拿给你。 #### 编译器和解释(执行)器 同v8引擎, v8引擎就是javascript的编译器和解释器。区别在于,编译型语言的编译器和解释器是分开的,相当于先洗菜,切菜;切好后交给解释器,炒菜; 而js的编译器和解释器是在一起的,一个人完成洗菜、切菜、炒菜。 #### 内置库 就是后厨内提供的,已有的服务,比如煤气啊、菜刀啊等等和炒菜相关的服务。 #### 第三方库 后厨内不提供的服务,外面人提供的服务,比如菜刀不够快,需要的磨刀服务。电话预约送菜上门服务等等。 #### 学习js的方向 先学习如何使用内置库和第三方的库,帮自己完成自己的需求。 然后具体掌握,了解内置库和第三方库,能调用他们服务我的业务需求。 最后能根据业务需求,知道什么时候用什么样的库能最好的完成我的需求。 ================================================ FILE: homework/lesson1/caozhen.md ================================================ # 第一次作业 ### 代码执行流程的类比 #### 描述 老师课上通过零基础的**类比方法**,让我们理解了代码执行是怎么回事; 在银行开户案例中;谈到了几个弊端和改进: - 银行开户的**核心业务动作**是:先审核材料,再执行处理 - **弊端[1]**审核和执行流程积压在1个工作人员身上,顾客等待时间过长;**改进[1]**将工作人员区分成大厅人员(审核)&窗口人员(处理),银行压力减轻(*软件功能分解*) - **弊端[2]** 对顾客来说,需要交两次不方便(*个人复杂交互*); **改进[2]** 由大厅工作人员直接交到窗口,不需要个人转交(*优化交互设计*) - **弊端[3]** 对顾客来说,需要识别银行的不同角色(大厅人员&窗口人员); **改进[3]** 增加窗口的概念,顾客直接面向窗口即可( *(类)封装*) - **弊端[4]** 顾客可能还需要一些额外服务 ; **改进[4]** 银行内部增加提供这些服务 因此,我们得到了开户环境:包括内置服务、预处理、执行 - **补充[1]** 区分不同的用户等级,可以分别定义针对不同用户的开户环境 - **补充[2]** 用户可能同时伴随有其它非银行需求,因此还可以增加第三方服务 #### 总结几个类比 - 银行开户环境 vs JS运行环境 - 银行核心业务 vs V8引擎 - 审核&执行 vs 编译器&执行器 - 银行内置服务 vs 内置库 - 非银行服务 vs 第三方库 - 开户环境由内置服务&核心业务组成 vs JS运行环境由内置库&V8引擎组 - 针对不同用户的开户环境 vs 浏览器运行环境&NodeJS运行环境 #### 总结几个代码开发理念 - 由于软件可靠性差导致的软件功能分解 - 由于个人复杂交互导致的优化交互设计 - 为了避免个人不合理操作导致的类封装 ### 运行环境 - JS的运行环境分为两类:浏览器运行环境&NodeJS运行环境 - 黑盒:直接把运行环境当成一个黑盒子,初学者完全不需要关心代码实际处理过程 - 由内置库和V8引擎组成:写代码实际上就是在使用(调用)这些内置库;写好后将代码送入V8引擎 再次类比,到底什么是运行环境? - 比较婴儿和小学生的生活环境,有相同,有不同,有差异性 - 浏览器运行环境&NodeJS运行环境同样有差异性,他们之间的内置库是不一样的 ### V8引擎 - 是JS运行环境的**核心**;实现两个功能:对JS代码编译、执行 - 真正写代码的时候,完全不需要关注它 ### 编译器/解释(执行)器 - 编译:在代码执行前,对代码预处理(分析代码&优化代码等) - 执行:运行代码 - 编译型语言:执行前需要先经过编译的过程,将全部代码翻译成机器语言再交给执行器执行,例如:C/C++/Java等 - 解析型语言:一条语句,一边翻译一边执行,没有明显的先编译过程,例如:JavaScript等 ### 内置库 - 运行环境中的内部服务 - 不同类型的运行环境,内置库不完全一样 ### 第三方库 不属于运行环境,但是代码执行不可缺少的组成部分 ### 学习JS的方向 结合个人的方向,希望通过JS的学习,对前端技术有一个比较全面的掌握和理解。 ================================================ FILE: homework/lesson1/chaigaoping.md ================================================ 1.类比代码执行流程 代码传入到编译器和解释器之后,经过编译/解释处理,然后输出结果。 2.运行环境 运行环境就是能够使代码条用内置服务的一个环境,里面包含了两个运行环境:浏览器运行环境和nodejs运行环境。两者都有V8引擎,它可以理解为一个对代码进行预处理和执行的黑盒子。 3.编译器/解释(执行)器 一个是对我们的代码进行分析词法、语法、语义、优化代码,另外一个是解释代码、执行代码。 4.内置库 某种核心功能的实现集合。 5.第三方库 可以优化核心功能的集合。 6.学习js的方向 因为我这份作业是在开课后的20天,31号才补交的。从过去三周的经验来看,除了听老师的课只外,还要投入时间去玩代码。去把基础补上来。还有就是要和一群人一起走。最后是要有很强的目标感。自己之前就尝试过学编程,但是失败了。这次重新捡起来,发现自己对于技术还是没有死心。既然没有死心,那就便有了希望。 ================================================ FILE: homework/lesson1/chengjun.md ================================================ ###【程君的课后总结】-**javascript** 1.类比代码执行流程 银行的开户流程 请求——输入——输出 请求:内置服务 输入:预处理 输出:执行 可以把预处理与执行合起来,在内部解决,称为业务核心 于是:JS 请求:运行环境内置库与第三方库 输入:工程代码 输出:解释器执行 2.运行环境 浏览器运行环境:包括内置库和V8引擎 nodejs运行环境:包括内置库和V8引擎 运行环境的类比:婴儿的生活环境,小学生的生活环境都是不一样,如果婴儿生活在小学生的生活环境就会存在问题。 每个生活环境中,都存在一些模块,比如,爸爸、医院、家、玩具等等。相当于一个库。 也就是说,在写JS时,一定要明白是写浏览器环境的代码还是在nodejs。 3、V8引擎 不用管它,相当于一个黑盒, 4、编译器/解释器 编译型语言,执行之前先来进行编译,分析词法、分析语法、分析语义、优化代码。比如C++. 需要一个专门的编译过程,通过编译器翻译成机器语言,特点:运行效率高,缺点:开发效率低 解释型语言:变解释变执行,一条一条执行,不会用明显的编译过程,非常简单,分析词法、 分析语法、分析语义、优化代码、解释代码、执行代码。 一条语句执行的时候才翻译,特点:开发效率高,缺点:运行效率低。 5、内置库 非常重要的仓库, 代码首先调用内置库,然后送过去执行,最后给出结果。 浏览器运行环境的内置库: JS内置对象、webAPI、webGL、HTTP、webRTC、canvas NODE运行环境内置库:JS内置对象、Node API 6、第三方库 浏览器第三方库: Node第三方库: express koa webpack promise 7、学习JS的方向 1、掌握编程语言 2、了解和掌握重要的服务能力 3、比较服务和技术之间的差异 ================================================ FILE: homework/lesson1/chenlingmin.md ================================================ # 【Javascript第一次作业】总结——陈玲敏 ## 类比代码执行流程 | JavaScript | 解释 | 银行 | 解释 | | ----------- | ---------------------------------------- | ----- | ---------------------------------------- | | 运行环境 | 分为两种:**浏览器运行环境**和**Nodejs运行环境**。 | 开户环境 | 提供一组服务,该服务包含接受申请、检验申请单信息和核对资格。提供集**预处理**、**执行**于一体的核心业务处理单元,同时还提供**内置服务**方面用户的业务办理。可分为两种:**普通用户的开户环境**和**VIP用户的开户环境**。 | | 内置库 | 网络库、日志库、JS内置对象... | 内置服务 | 为满足用户填写订单时提供的一组内部服务。 | | V8引擎 | Node:JS内置对象,Node API; 浏览器:JS内置对象,WebAPI,WebGL,HTTP,WebRTC,canvas; | 核心 | 业务处理的核心,涵盖**预处理**和**执行**两个模块。 | | | | 预处理 | 在真正执行开户前进行信息检查的处理过程,以保证执行处理的效率。 | | 编译器/解释(执行)器 | 一个可以执行代码的黑盒。 | 执行 | 执行开户操作的过程,操作完后并返回想要的开户结果。 | | 第三方库 | Node:Express,Koa,Webpack,Promise; 浏览器:jQuery,Vue,AngularJS,React; | 第三方服务 | 满足开户业务的需求 | | JS代码 | | 用户 | | ## 编译型和解释性差异? | | 解释 | 特点 | 缺点 | | ---- | ------------------------- | ----- | ----- | | 编译型 | 需要一个专门的编译过程,通过编译器翻译成机器语言。 | 运行效率高 | 开发效率低 | | 解释性 | 一条语句执行的时候才翻译。 | 开发效率高 | 运行效率低 | ## 学习JavaScript的方向 ##### 该怎么学JavaScript? > 掌握编程语言,编程方式调用服务来完成你的需求 ##### 该怎么提高? > 了解和掌握重要的服务能力,使其能服务你的业务。 ##### 该怎么进阶? > 善于比较服务/技术之间的差异性, 最好的方式实现你的业务。 ##### 学习JavaScript的难度: > 变化快和无边际。 ================================================ FILE: homework/lesson1/chenqiong.md ================================================ # JavaScript 入门课第一课总结 ## 用现实生活中的例子来类比代码执行流程 老师用银行开户的流程类比代码执行的流程,并通过几个版本的演进来类比业务的持续迭代。这些迭代可以说都是在之前版本的执行过程中,观察总结,进而演进而来,一个产品的迭代也应是如此。 ## 运行环境 JavaScript 运行环境有两种:浏览器和 node 。当我们打开浏览器,实际上是告诉计算机,帮我起一个浏览器的运行环境,之前只知道打开浏览器就是看网页而已。 ## V8 引擎 > V8 是一个由 Google 开发的开源 JavaScript 引擎,用于 Google Chrome 及 Chromium 中。 > V8 在运行之前将 JavaScript 编译成了机器码,而非字节码或是解释执行它,以此提升性能。更进一步,使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript 程序与 V8 引擎的速度媲美二进制编译。 ## 编译器/解释(执行)器 JavaScript 是解释型语言,代码是边编译边执行的,开发效率比较高,但运行比较慢。其他编译型语言如 C 、C++、Java 等都是需要先编译,编译通过后才能执行,特点是运行快,但开发效率不高。印象最深刻的就是以前自学 Java 的时候,写好代码,需要运行 javac 指令,对代码进行编译。 ## 内置库 JavaScript 语言本身自带的一些基本功能实现,包括基本的数据结构、模块、函数等,已经封装好了,开发者通过阅读文档,获知调用方法之后,就可以直接调用。其它语言也是如此。 ## 第三方库 一般指用同种语言开发的拓展功能,用来满足多样化的需求。也有用别的语言开发的第三方库,供 JavaScript 编写的代码调用。也有个说法叫不要重复造轮子,这里的轮子应该也是指的第三方库,一个功能,如果别人已经写好了,直接拿来用就可以了,没必要再自己写一个。 ## 学习 JS 方向 从一个最简单的项目开始,然后用各种新学到的东西对项目进行完善,并进行比较,多练习。 ================================================ FILE: homework/lesson1/chenrushan.md ================================================ # Hello, JavaScript 总结 从设计一个银行开户流程,一次次升级,然后抽象出业务架构,类比到JavaScript运行环境架构,清晰易懂。 我们写代码让计算机满足我们的需求,就如我们提交申请,让银行帮我们开户,这个过程需要一些服务,需要经过一些处理步骤,来完成我们的开户需求。 # JavaScript运行环境架构   由银行业务架构到JavaScript运行环境架构。 有了整体架构后(心中有图),逐一理解架构中的组成部分。 - JavaScript运行环境架构 - 运行环境 - V8引擎 - 编译器/解释(执行)器 - 内置库 - 第三方库 ## 1. 运行环境 运行环境,类比了不同人的生活环境,代码的运行也需要一定的环境,应该是能够使代码被计算机理解并运行起来的环境。 ### 1.1 V8引擎 V8引擎,类比银行员工处理申请材料,帮客户办理开户,个人理解为处理我们编写的代码,执行代码,计算结果的模块。 #### 1.1.1 编译器/解释(执行)器 将代码“翻译”成计算机能够识别的语言,然后执行。 ### 1.2 内置库 运行环境中提供的基础服务,供代码调用。 ## 2. 第三方库 在运行环境之外,由第三方提供的开源/付费的服务,通过调用可实现某些功能。 # 学习JS的方法 在JavaScript运行环境架构中,代码是如何运转的?  我们的工作在最左边,写的代码以及调用的内置库和第三方库。 入门:掌握编程语言,学会怎么调用库来满足需求。 提高:知道什么库可以满足需求。途径一,自己查找,途径二,问。 进阶:知道解决同样需求的库之间的差异,能够选择合适的库来更好地实现业务需求。 ================================================ FILE: homework/lesson1/chenyanxing.md ================================================ ##【第一次作业】 ———————————————————————————————————————— #####--*author:陈燕杏* #####--*version:V1* #####--*create_time:2017-08-17* ———————————————————————————————————————— ###1. 类比代码执行流程 ####对于代码执行流程的理解:我们写好的代码,来到运行环境,经过编译器/解析器一系列(分析词法、分析语法、分析语义、优化代码、解析代码、执行代码),运行完成后,输出结果。JS代码编写的过程中,需要调用浏览器或者Nodejs的内置对象来运行,并且提供了可拓展的第三方的类库,使功能强大。 ###2. 运行环境 ####JS运行环境:分为浏览器和Nodejs。他们里面的运行环境里都有V8引擎和内置服务。当然少不了的是我们底层的JS代码,对于JS运行环境的运行还需要第三方库的支持。 ###3. V8引擎 ####这是同学的笔记:V8引擎是一门底层技术,chrome就是基于V8引擎构建的,直接的体现就是chrome浏览器中写JS的代码,代码的执行速度快。 ###4. 编译器/解释(执行)器 ####编译器/解析器:就是在运行环境中一个可以执行代码的黑盒。代码的输入通过其编译/解析输出结果。 ###5. 内置库 ####内置库是该运行的环境下,可以调用出网络库,日志库,JS内置对象···浏览器和Node的运行环境内置库里,JS内置对象是他们共同一样的部分。 ###6. 第三方库 ####第三方库我的理解是对运行环境提供了更加强大的功能支持。 ###7. 学习JS的方向 ####跟着老师的节奏,学习编程的思想,从而入门编程的世界,最重要是掌握这门技能。 ####体会:第一节课的知识点因为都是没有见过的,脑子里没有可以迁移的知识来理解,所以上述写的理解没有很深刻到位。看了学霸同学们的作业,有些不懂的地方也会豁然开朗。 ================================================ FILE: homework/lesson1/chenzidong.md ================================================ 第一课 git到的JS知识 # 初步了解,整体印象。 通过银行开户的类比,把JS运行的流程,一些大家都熟悉的概念,送到大家的认知里。印象最深的是开户窗口,预处理,和执行,对应JS里的 网页窗口,编译器,和执行器。还有流程可以不断优化,以达到最优的解决问题的方案。 #运行环境 在我看来就像基础设施,里面有一些内置或第三方的服务和工具。 #V8引擎 因为JS是一种解析型语言。要边解析边执行,速度就会比较慢。但它服务的对象又是直接面对用户的,要求提高速度,就需要有一种工具来加速把代码和其它数据库整合成机器语言。 #编译器/解释(执行)器 前者把中间文件,解析成机器语言,后者执行机器语言代码。在js的运行环境里,编译器和解释器是合二为一的,边编译边执行。 #内置库/第三方库 运行环境内部的服务/运行环境外部的服务 不同的运行环境,内置服务是不一样的。 #学习JS的方向 先学会习编程的方式解决问题。 然后学会不同工具之间的差异,更好的优化服务。 第一次在浏览器上运行代码并弹出自己名字的对话框,很高兴! ================================================ FILE: homework/lesson1/chenziwen.md ================================================ 1. 类比代码执行流程 + 就是把现实的事件流程抽象出来,用最精简的方式来描述一个事件的执行流程,方便思考,方便转化为代码。 2. 运行环境 + 运行+环境 + 运行:就是执行代码并期望得到想要的结果。 + 环境:就是生存条件,必要条件;也就是代码执行并能返回结果的必要条件。像老师课件里说的婴儿的环境,学生的环境中除了必要条件(爸爸妈妈等)还有资源这类提高生活舒适度的条件,就好比编程中能有更方便,更快捷,更高效的方式提供。 3. V8引擎 + >V8 作为一个 JavaScript 引擎,最初是服役于 Google Chrome 浏览器的。它随着 Chrome 的第一版发布而发布以及开源。现在它除了 Chrome 浏览器,已经有很多其他的使用者了。诸如 NodeJS、MongoDB、CouchDB 等。 V8 使用了直译的方式,即把 JavaScript 代码直接编译成机器码( Machine Code, 有些地方也叫 Native Code ),然后直接交由硬件执行。 与传统的「编译-解析-执行」的流程不同,V8 处理 JavaScript,并没有二进制码或其他的中间码。 简单来说,V8主要工作就是:「把 JavaScript 直译成机器码,然后运行」 + 顾名思义“引擎”就像是汽车的发动机,可以更快的驱动汽车。V8引擎应该能帮助编程者更快的实现编程目标。 + V8引擎比以前的边解释边执行的效率更高。 4. 编译器/解释(执行)器 + > **编译器** 是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的. 这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式) 编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。 解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。 5. 内置库 + 内置库JS环境中(浏览器&node.js编程环境中)已经编写好的一些函数方法,可以直接调用而不用重复发明轮子,是提高编程效率的工具之一。 6. 第三方库 + 第三方嘛,应该是相对于内置库来说的。 + 不是当前编程环境中有的,是需要另外添加进来的。 + 第三方库的使用方法还待研究…… 7. 学习JS的方向 1. 学习并熟悉JS编程语言,熟悉语法,学会调用服务(内置库、第三方库)来提高效率。尽快给自己一个正面反馈,加强信心。 2. 理解自己项目的需求,了解并熟悉相关的(重要的)服务。 3. 找不同!比较服务/技术之间的差异,分析其优异性,寻找到最适合自己的方法。 4. JS技术更新变化速度飞快。寻找可复用的经验,加快新技术的学习速度。老师PPT中提到的难度二“无边际”,使我想到avascript无所不能,但要有取舍,要选方向。不能样样了解,样样稀松。 ================================================ FILE: homework/lesson1/cloudyview.md ================================================ 听徐老师的课,感觉从类比入手,体会比自己看书要好多了,理解深入了。 ## 1.类比代码执行流程 代码的执行方式有两种,即解释型语言和编译型语言的的执行方式。 ### 解释型语言的代码执行流程 简单说就是一条一条的执行,看到一句代码,解释一句代码。这个类似于弹钢琴的时候的视奏。视奏基本上就是看一句音符,然后弹出来。 ### 编译型语言的代码执行流程 编译型语言的代码需要先由编译器编译成执行代码,然后再执行。这个类似于点歌,观众点歌,然后乐师根据观众给的曲目,直接弹奏整首曲目。 感觉不是很恰当。现在能想到的是这个。 ## 2. 运行环境 运行环境包括了用于解释程序的引擎(可以是编译/执行方式的,也可以是解释的),以及内置库,第三方库。这些库和引擎核心构成了运行环境。 对于JS来说,有两种运行环境,即WEB浏览器和NODE。对于这两类运行环境,相同的是V8引擎和JS内置对象,其他的库有相当大的不同。 ## 3. V8引擎 V8引擎是JS程序解释和执行的核心。 ## 4. 编译器/解释(执行)器 对于JS这样的解释型语言来说,只有解释器。程序将按照顺序一句句的被执行下去。也就是一边读取,一边解释(理解),一边执行。 对于C这样的编译型语言来说,需要先由编译器将程序变成执行代码,然后再运行。 ## 5. 内置库 内置库是指JS运行环境里面的一组库,这些库是运行环境自带的。 例如,WEB浏览器会自带一组JS的库,如果你的程序只调用了这些内置库的话,就意味着你的程序可以直接在任意的浏览器运行(当前主流浏览器?太古老的可能不一定支持当前的版本)。 ## 6. 第三方库 第三方库不是由JS官方出品的,不会出现在JS的内置库里,即JS的运行环境本身并不带有这些库。如果你需要使用这些库,那么必须安装这些库,才能使用它们提供的服务。 ## 7. 学习JS的方向 三个阶段,入门的时候,必须学会如何调用各类库的方法。 要想提高,就要学会对比和分析不同的库所提供的功能和服务之间的差异,理解这些,以便为自己的业务流程选择适合的库进行编程。 要进一步提高,就要更深刻的理解你所要解决的问题,根据业务的需要来优化编程方法。 ================================================ FILE: homework/lesson1/cuimeng.md ================================================ # 第一次JavaScript课堂总结 > 由于自己在大学期间有过相关的编程语言的学习经历,后来的工作需要也写过一些小程序,本堂课的内容对我来讲理解起来还算相对容易。然而收获依然很大,对编程语言的运行机制有了比较系统的认知。 ## 代码的工作流程 银行开户的流程类比代码的执行过程,让人很容易理解。 JavaScript是一种脚本语言,他的工作原理是解释型的,也就是边编译边执行。这种语言的好处是可以适应多平台的环境,可以不用每移植到一个平台就重新改写代码。通过统一的代码实现各个平台之间的无缝移植和执行。 ## 运行环境 JavaScript的运行环境有浏览器端和node.js的后台端,最初的JavaScript是浏览器运行的脚本语言,后来某位大神把他重新编写,在后台运行发现也非常不错,就有了node.js。 V8引擎是一种常用、高效的JavaScript编译器,可以运行在chrome和node.js。它把JavaScript的代码编译成为执行更高效的机器码。同时可以优化代码,使得编译效率更高。 ## 内置库 JavaScript的内置库分在chrome和node.js上根据功能的不同而有所差异。 内置库是一些预先写好的代码,用来实现一些基本的操作。例如输入输出、数据处理等。通过打包好常用的功能来简化编程的繁琐程度,提高编码效率。 ## 第三方库 是非内置在程序中的,针对某些特定的功能来预先编写好的程序代码,在编程的过程中,需要调用进入程序中来使用,第三方库的使用需要查看document来了解其中不同函数和方法的使用方法和注意事项。 针对不同的编程目的,JavaScript有丰富的第三方库可供使用。具体的工作环境中对第三方库的使用可以参考资深人士的建议。查看GitHub上面的库的受欢迎程度来决定。 ## 学习动力 学习JavaScript使我一直以来的期望,希望能够通过js的学习,让自己进入编程的大门,锻炼编程思维,同时能够通过自己的代码为世界更美好一点作出自己的贡献。 ================================================ FILE: homework/lesson1/cuimiao.md ================================================ #小小白崔淼的学习之路——lesson 1 1. 类比代码执行流程 按照老师的类比,就好像是去银行办卡,先要填写表单(输入代码),然后提交审核(编译器编译),办理业务(执行器执行代码),最终拿卡(反馈结果)。此外,银行还提供了内部服务(内置库),还有第三方公司提供的便捷服务(第三方库)。 2. 运行环境 JS的运行环境分为”浏览器”和”node”,每种运行环境有着不同的内置服务(内置库)和第三方库。这就好比是每个人周边的环境都不一样,有着不同的(有时也有重叠)内置服务和第三方服务。 3. V8引擎 V8引擎为JS语言中负责预处理和执行代码的部分。 4. 编译器/解释(执行)器 应是V8引擎,对代码进行编译和执行。 5. 内置库 每种运行环境中,直接可供应用的内置库。 6. 第三方库 每种运行环境中,外部的可供应用的外部资源库 7. 学习JS的方向 焦点集中在我们写的代码上,我当前的目标就是熟练运用代码,熟练掌握编程语言。 ================================================ FILE: homework/lesson1/dangfeipeng.md ================================================ ### 用类比的方式推导 JS 框架 徐老师用“银行开户流程”的四次改进,由浅入深、层层递进地推导出 JS 框架,通过类比让我们借助熟悉的“银行开会流程”在很短的时间内对陌生的 JS 框架产生了感性认识,了解了主要的组成部分以及各部分之间的关系,形象生动。 ### 运行环境 举个不太恰当的比喻,JS 运行环境就像智能厨房的控制中心,它有各种原材料存储位置以及使用说明(相当于内置对象),也有捡菜、洗菜、切菜、炒菜等基本功能说明(相当于内置库),以及一个菜谱制作器(相当于 V8引擎),一旦收到客户的要求(相当于代码),菜谱编制器就根据客户的要求编制菜肴的加工说明(本地代码),最后厨师机器人根据加工说明将具体食材做成成品菜肴,根据菜肴的基本分类,控制中心又分为中餐和西餐两大类,同时当控制中心的基本功能无法满足客户要求时,比如日料,就可以借助其他第三方来协作完成(相当于第三方库),这其中菜谱编制器是核心,由它来负责整体的运行、控制和调度,可以形象地类比为 V8引擎。 ### 学习 JS 的方向 大致的路线图是: - 学习:掌握编程语言,用编程的方式调用服务来完成你的需求,我的理解是掌握基础知识,包括语法、常用的内置对象; - 提高:了解和掌握重要的服务能力,使其能服务你的业务,我的理解是重点搞清内置库,其次是第三方库; - 进阶:善于比较服务/技术之间的差异,用最好的方式实现你的业务。 ================================================ FILE: homework/lesson1/dengxy0907.md ================================================ 第一次课作业 =========== ### 类比代码执行流程 > 老师通过银行开户流程类比了代码,代码就是一个个功能的体现,一个个具体的功能通过翻译让计算机执行,达到获取结果的目的 ### 运行环境 >运行环境是能够执行代码的环境 ### V8引擎 > 一个运行代码的黑盒子 ### 编译器/解释器 > 一个把代码翻译给机器的东西 ### 内置库 > 一个装有js代码的背包 ### 第三方库 > 一个额外选择的武器库 ### 学习js的方向 > 到这已经完全忘记,对我自己而言,就是通过编辑代码、调用库来实现自己的需求。 ================================================ FILE: homework/lesson1/diaozhicong.md ================================================ #【第一次作业】写一篇总结 ##1. 类比代码执行流程 用银行开户流程的优化类比让我们理解整个代码执行流程,比较形象,也让我们小白更好的理解。另外一点我的感受是,流程图是一个很好的理解工具,未来需要好好打磨。 ##2. 运行环境 运行环境分为Node环境和浏览器环境。 JS的运行环境我们可以理解为一个可以执行代码的黑盒。 ##3. V8引擎 V8引擎是Js运行的核心部分。V8引擎是运行环境中完成编译、解析及执行代码等工作的模块。使得我们编写的易于人们阅读的高级语言代码能够顺利的转换成机器能理解的语言。 ##4. 编译器/解释(执行)器 我们所编写的高级语言,本质上计算机是无法直接执行的,需要通过编译器将其编译成计算机可以识别的代码,类比于说不通语言的两个人需要相互交流,需要一个翻译一样。 目前有两种: **编译型**: 需要一个专门的编译过程,通过编译器翻译成机器 语言。特点:运行效率高。缺点:开发效率低。典型的代表是 C 和 C++等; **解释性**: 一条语句执行的时候才翻译。特点:开发效率高。 缺点:运⾏效率低。典型的如JS等。 ##5. 内置库 编译代码通常是在调用各种内置的库,不同的运行环境的内置库有差别: >浏览器的内置库包含JS内置对象,WebAPI, WebGL, HTTP, WebRTC, canvas等。 >Node内置库包含JS内置对象,Node API等 ##6. 第三方库 第三方库是指由第三方提供的收费或者免费的库。第三方包括公司、个人、开源等。 ##7. 学习JS的方向 通过学习JS,进入编程领域,以后能做一些自己或别人的项目。 学习提高的方向,借鉴老师和同学的总结: > 1. 初学:掌握编程语言,用编程方式调用服务来完成你的需求。 > 2. 提高:了解和掌握重要的服务能力,使其能服务你的业务。 > 3. 进阶:善于比较服务/技术之间的差异性,用最好的方式实现你的业务。    ================================================ FILE: homework/lesson1/donglili.md ================================================ ## 第一次作业 执行代码就好像去银行办开户业务。本质上就是输入信息、获得结果。 而运行环境相当于银行,就是我们要“办事”的地方,也可以理解我们要执行代码的地方。我们的代码是针对运行环境而写的,只有在运行环境下才能够正确执行。 V8引擎就是完成代码检查和执行的地方,在初始代码经过内置服务库和第三方服务库重新整合代码后,会送入这里执行。 编程语言大致上分为两种,一种是编译型语言,这种是先通过编译器将代码编译成可执行的命令,之后送由执行器执行。他们是统一编译之后在执行,所以开发效率低,因为每改动一些代码都需要重新编译。但相对的通过执行器运行的时候就会快很多。而解释性语言是一条一条的进行,编译一条执行一条,所以它的开发效率高,因为每次做了改动,不需要全部代码都进行编译,相对的,运行效率低,因为每运行一条代码都需要编译一次。 ================================================ FILE: homework/lesson1/duhongxia.md ================================================ 杜红霞第一课总结 1. 类比代码执行流程 用去银行开户这一具体流程类比JS运行环境框架,框架包含: JS运行环境[浏览器运行环境(v8引擎+内置环境)+Nodejs运行环境(v8引擎+内置环境)]—— 第三方库——JS代码 2. 运行环境 包含浏览器运行环境和Nodejs运行环境,JS运行环境如同银行环境,浏览器运行环境和Nodejs运行环 境如同银行中的两类用户的环境 3. V8引擎 核心:用来执行代码 4. 编译器/解释(执行)器** 是V8引擎的组成部分,用来处理和解析代码 5. 内置库 是运行环境所提供的一组服务,用来实现代码的功能 代码首先调用内置库,然后送过去执行,最后给出结果。 浏览器运行环境的内置库: JS内置对象、webAPI、webGL、HTTP、webRTC、canvas NODE运行环境内置库:JS内置对象、Node API 6. 第三方库 付费或开源的各类服务于JS的工具库 浏览器第三方库: Node第三方库: express koa webpack promise 7. 学习JS的方向 有难度:变化快+无边界 学习:用编程方式调用服务来完成你的需求 提高:了解和掌握重要的服务能力,使其能服务你的业务 进阶:善于比较服务/技术之间的差异性,用最好的方式实现自己的业务。 ================================================ FILE: homework/lesson1/fangqingyang.md ================================================ ### JS第一课总结: #### 1运行环境(Nodejs和浏览器) 我们写了一份代码,放到运行环境里面,运行环境为我们提供所需要的各种服务如用V8引擎来执行代码,提供内置库来满足我们的需求等。需要注意的是:JavaScript有两种运行环境,Nodejs和浏览器,这两种运行环境是不同的,就像动物和植物的生长环境的区别。 #### 2 V8引擎 V8引擎属于运行环境的一部分,是运行环境的核心,负责执行我们所写的代码,让代码跑起来,得到我们的结果。 #### 3 内置库 内置库属于运行环境的一部分,为我们提供一系列运行代码所需要的服务。比如:alert() #### 4第三方库 不属于运行环境的一部分,是或由第三方的公司开发,或由个人开发,或收费的,或开源的服务,目的是为更好的满足我们的需求,提供让我们的业务更牛逼,更好的服务,让我们不需要重造轮子。 #### 5 编译器/解释器 编译器:将我们所写的正确的代码,转换成机器能理解的机器代码,让我们的代码变得可执行。 解释器:对我们所写的代码进行这个过程,解释-运行-解释下一行代码-运行下一行代码。。。。,好处是开发速度快,省略了编译这一步,但是运行速度慢了,因为运行时是边解释边执行,不像运行编译好的机器代码一把梭子下去。 #### 6 如何学号JS 1 掌握编程语言,运用编程的方式调用服务来完成自己的需求。(初学者,目前努力的方向) 2 了解和掌握重要的服务能力,使其能够满足自己的业务。(提高) 3 善于比较分析服务/技术之间的差异,用最好的方式实现自己的业务。 (进阶) #### 7 用类比的来推导JS框架 我们(客户)写了代码(申请表),交给运行环境(银行柜台),运行环境里面的编译器(员工A),先审核,检查我们的代码,没问题了将处理好的文件(编译文件)就交给V8引擎(员工B)去执行,期间V8引擎调用内置库里面的服务(比如打印机),或许还有第三方库的服务(比如警察局办证),最后输出一个结果(给我们一个结果) #### 8 代码执行流程  首先我们写代码,用编程的方式,按照自己的需求,写要用到什么内置库,什么第三方库的服务,接着交给编译器进行预处理,得到一个编译文件,接着给V8引擎执行,调用内置库,第三方库的服务,然后得出一个结果。 ================================================ FILE: homework/lesson1/fanliao.md ================================================ 新生大学第一次JS课作业 1. 类比代码执行流程 老师以一般的银行开户流程作为例子,类比了我们从代码的输入到编译执行到输出结果,使一个抽象的过程具体的展现在我们眼前。 2. 运行环境 JS运行环境分为浏览器环境和Node环境,不同的环境对应不同的的内置库和第三方库,但内置库中都有JS内置对象。 3. V8引擎 V8引擎是业务核心,是执行部分。 4. 编译器/解释(执行)器 编译型语言的特点是:代码执行考虑高,但是开发效率低;解释性语言代码执行效率低,但是开发效率高。 5. 内置库 内置库就是指不同的运行环境下我们的代码可以调用以实现某些功能的工具。 6. 第三方库 第三方库是有别于内置库的一个开放的外部资源,更好的帮助我们达成目标,它不断更新,不断为我们提供更好的服务。 7. 学习JS的方向 光说不练假把式,学习JS应该多练习,在实践中发现新的收获。 ================================================ FILE: homework/lesson1/fanqing.md ================================================ # 第一课作业 经过好几天逐渐加码的预热练习,JS同学的学习热情都已被调动起来,17年8月8日,我们的第一次正式课开课。 第一课是Javascript的概况讲解课,并同时老师很有心的与初学者进行了学习方法的探讨,对如何利用这门课、该如何学习、该如何提高以及该怎么进阶给出了建议与方向,力求让我们的学习更加高效、更多获益。 开始我的学习与理解~ 对于初期接触编程的人来说,直接讲代码设计流程、执行流程、框架等都太抽象,老师采用了类比的方式进行代码执行流程的讲解,由现实场景引向抽象世界。 ### 以银行开户流程作为类比说明: 有开户需求的客户在银行内使用银行提供的复印、拍照等服务完成申请所需资料准备,提交至银行窗口,窗口服务人员受理后,由负责审查的人员对简单的填写格式、准确性问题进行检查预处理(不是每个银行都如此),预处理检查通过的后,有权限的工作人员核对征信及资格,通过的给予客户发卡,未通过的给予驳回。窗口服务人员的内部工作是整个开户业务的核心部分。对于客户来说只需要与窗口服务人员对接沟通,保证了客户的服务感知。 JS的代码执行流程与之类似,程序员通过调用内置服务功能,编写提交符合业务需求的代码至JS代码执行的核心(V8引擎),内部一系列处理后输出执行结果。 针对不同的客户,还可以区分出普通客户与VIP客户,这时会采用不同的流程——普通柜台以及VIP柜台,也就是不同的业务环境,与之类似,JS也有针对不同类业务需求的不同运行环境。 ### JS的运行环境框架: 运行环境(含两类)、第三方库、JS代码。 #### 两类运行环境分别是: 1.浏览器运行环境;2.Node运行环境。总体看两个环境均由V8引擎(核心)、内置服务、第三方库以及JS代码构成。 为了更好的理解“环境”的概念,同样的,用婴儿与学生的生活环境不同进行类比,有助对于运行环境差异的理解。 细分看两个运行环境,相同在于:均有V8引擎、JS内置对象、JS代码以及某些第三方库,不同在于:其他内置服务库的不同,浏览器运行环境内置库有HTTP、WebAPI等,Node运行环境内置库仅有Node API,以及一些第三方库的不同。 #### V8引擎: 是一个可执行代码的黑盒,它发挥着编译器/解释(执行)器的功能,每条代码在需要执行时都可以进行编译,翻译成机器语言进行执行。相对C、C++等编译型语言(需要整体编译完成后才能执行),开发效率高但运行效率低。 #### 编译器/解释(执行)器: 功能包含分析词法、分析语法、分析语义、优化代码、解释代码、执行代码。JS是解释性语言,以上功能合为一体。编译型语言是将后面的“解释代码”“执行代码”需要提交至单独的执行器来完成。 #### 内置库: 即内置服务库,包含JS内置对象以及其他的内置服务。这些由运行环境内置,基本运行环境启用之后,可以直接调用,就像银行内的复印服务、拍照服务、查询逾期服务等。 #### 第三方库: 是为了提供更便利、更丰富的开发应用功能,类似银行的警务服务、理财公司专柜服务等,就像分工协作的社会,各自发挥所长。在内置库功能不能满足的情况下,我们学会充分运用第三方库,会事半功倍。JS的浏览器运行环境的第三方库有jQuery、Vue、AngularJS、React等,JS的Node运行环境的第三方库有Express、Koa、Webpack、Promise等。 ### 关于学习JS的方向 Javascript是一门无边际的语言,有很多语言是基于Javascript开发出的,有一个说法“JS是编程界的汇编语言”。 对于汇编语言,在校时曾学过,印象中它是与最底层的计算机运行方式对接的语言,按照计算机的运作原理进行编译,涉及寄存器、进栈出栈等。也就是说理解了Javascript语言,其他在她的基础上开发出的语言,是不是也都更容易理解了呢?也许答案是肯定的,若真如此,对于向往编程世界的人来说,更不能错过。 JS的发展变化很快,2009年ES5(ES是JS的便趁个语言规范),至2017年已达ES8,我们现在只需要集中注意力、聚焦在2015年的ES6这个版本,学懂后,对新版本的更新功能也会很容易理解。 ### 要实时关注以下几点: 该怎么学习?——掌握编程语言,用编程方式调用服务来完成我们的需求; 该怎么提高?——了解和掌握重要的服务能力,使其能服务我们的业务; 该怎么进阶?——善于比较服务/技术之间的差异性,用最好的方式实现我们的业务。 Javascript是一门编程语言,就像学习其他语言一样,只有不断的重复、应用,把头脑中的想法,刻意的尝试用她的方式表达出来,才是最佳的学习方法。 #### 如有理解不当处,请老师、同学批评指正! P.S. 课程选的背景音乐太喜欢了,不仅因为歌好听,还因为这首歌兴起的那段时间,2002年,当时我报名参加了一个培训学校的MCSE课程,来回路上,常伴随着这首歌。时隔这么久,现在我再次报名参加与上次本质上很接近的兴趣爱好的学习,在课程中又听到这首歌,很有时光倒流的感觉,非常美好~ 2002年的学习有些懵懂,没能更多的学以致用,希望这一次能学到讲出来、学到用起来~ ================================================ FILE: homework/lesson1/feixiguang.md ================================================ # 第一课总结 ### 1.类比代码执行流程 使用银行开户方式 * 1.填写申请单 * 2.去柜台开户 * 3.发卡 *** 类比一套业务架构: * 开户环境:提供一组服务,该服务包含接受申请、检验申请单信息和核对资格。 (开户环境提供集预处理、执行于一体的核心业务处理单元,同时还提供内置服务方面用户的业务办理。) ``` 内置服务:为满足用户填写订单时提供的一组内部服务。 业务核心:涵盖预处理和执行 预处理:在真正执行开户前进行信息检查的处理过程,以保证执行处理的效率。 执行:执行开户操作的过程,操作完成后并返回想要的开户结果。 ``` * 围绕开户业务,会有一堆第三方服务供用户使用,以满足开户业务的需求。 *** JS运行环境框架: * JS运行环境对应银行开户环境 * JS代码对应用户 * 同样针对JS代码也提供第三方的库,来满足更多的需求。 *** 编译型和解释性差异? * 编译型:需要一个专门的编译过程,通过编译器翻译成机器语言。特定:运行效率高。缺点:开发效率低。 例如:C 、C++ . * 解释性:一条语句执行的时候才翻译。特点:开发效率高。缺点:运行效率低。例如:JavaScript . *** ### 2.运行环境 JavaScript有两种运行环境 * 浏览器运行环境: 基于浏览器的 javascript 前端 JS * Node.js运行环境:基于服务端的 javascript 后端 Node.js 两者语法一样,组成不一样 JavaScript: * ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象) * DOM(一些操作页面元素的方法) * BOM(一些操作浏览器的方法) Node.js: * ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象) * OS(操作系统) * file(文件系统) * net(网络系统) * database(数据库) *** ### 3.V8引擎 * V8是Google开发的开源JavaScript引擎。 * JavaScript 引擎的基本工作是把开发人员写的 JavaScript 代码转换成高效、优化的代码, 这样就可以通过浏览器进行解释甚至嵌入到应用中。 [一篇给小白看的 JavaScript 引擎指南](http://web.jobbole.com/84351/) *** ### 4.编译器/解释(执行)器 JavaScript引擎包括: * 编译器。主要工作是将源代码编译成抽象语法树,然后在某些引擎中还包含将抽象语法树转换成字节码。 * 解释器。在某些引擎中,解释器主要是接受字节码,解释执行这个字节码,然后也依赖来及回收机制等。 * JIT工具。一个能够能够JIT的工具,将字节码或者抽象语法树转换成本地代码,当然它也需要依赖牢记。 * 垃圾回收器和分析工具(profiler).负责垃圾回收和收集引擎中的信息,帮助改善引擎的性能和功效。 *** ### 5.内置库 * 浏览器运行环境的内置库包含:JS内置对象、WebAPI、WebGL、WebRTC、HTTP、canvas . * Node.js运行环境内置库包含:JS内置对象、Node API . *** ### 6.第三方库 [JavaScript函数库](https://zh.wikipedia.org/wiki/JavaScript%E5%87%BD%E5%BC%8F%E5%BA%AB) JavaScript 框架(库) JavaScript 高级程序设计(特别是对浏览器差异的复杂处理),通常很困难也很耗时。 为了应对这些调整,许多的 JavaScript (helper) 库应运而生。 这些 JavaScript 库常被称为 JavaScript 框架。 所有这些框架都提供针对常见 JavaScript 任务的函数,包括动画、DOM 操作以及 Ajax 处理。 *** ### 7.学习JS的方向 * "掌握编程语言,用编程方式调用服务来完成你的需求" *** * "了解和掌握重要的服务能力,使其能服务你的业务" *** * "善于比较服务/技术之间的差异性,用最好的方式实现你的业务" ================================================ FILE: homework/lesson1/fengkai.md ================================================ 1.类比代码执行流程 JS运行环境框架类比于银行体系的业务构架; 浏览器运行环境相当于普通用户的开户环境; Nodejs运行环境相当于VIP用户的开发环境; V8引擎相当于银行的业务核心; 内置库=内置服务; 第三方库相当于第三方服务; JS代码相当于用户。 2.运行环境 提供集预处理、执行于一体的核心业务处理单元,同时还提供内置服务。 3.V8引擎 计算黑箱 4.编译器/解释(执行)器 一边编译一边解释,解释性语言,开发效率高,运行效率低。 5.内置库 系统内置封装的代码 6.第三方库 外部调用的封装代码 7.学习JS的方向 web前端开发 ================================================ FILE: homework/lesson1/hanmeng.md ================================================ Javascript第一课总结 1. 类比代码执行流程 首先,老师运用“银行开户流程”类比了代码执行流程 银行这大环境类比JavaScript,在银行的大环境中有普通用户环境和VIP用户开户环境,分别对应了JavaScript环境中的浏览器运行环境和nodejs运行环境 他们都有两部分组成V8引擎和内置服务,分别提供最满足各自的需求。另外,还有有第三方库,为浏览器的运行环境和nodejs的运行环境同时提供第三方服务代码。 2. 运行环境 JavaScript的运行环境包括浏览器运行环境和nodejs运行环境,在这两运行环境中都有V8引擎和内置库,在我们写代码的时候,学会用代码调用不的内置库是关键, 完全不用考虑V8引擎的工作。 3. V8引擎 对代码进行预处理,处理,执行。我们只用知道V8引擎是编译解析执行代码的就可以了,作为菜鸟不需要知道它的内部工作原理。 4. 编译器/解释(执行)器 V8引擎的组成部分,编译执行我们创造的代码,Javacript是一种解释型语言,就是编译执行一起执行。 5. 内置库 运行环境的各种打包的服务,让我们通过代码调用,实现不同的功能 6. 第三方库 由第三方公司或个人提供的不同功能的代码库,供我们使用以实现更好,更帅的功能。 7. 学习JS的方向 重点来了,深刻理解记住这几句话: 作为小白你应该“掌握编程语言,用编程的方式调用服务来完成你的需求”,掌握语言,把基础打牢固。 提供阶段的你“了解好掌握重要的服务能力,使其能服务你的业务”,主要掌握各种库的功能 进阶阶段的您“善于比较服务/技术之间的差异性,用最好的方式实现你的业务。”,比较,思考,找出最好的方式实现你的业务。 8.学习的难度 变化快,我们要聚焦重点 ES6 无边际 创造能力无限,空间无限大 ================================================ FILE: homework/lesson1/hanwei.md ================================================ ## 第一次作业 执行代码就好像去银行办开户业务。本质上就是输入信息、获得结果。 而运行环境相当于银行,就是我们要“办事”的地方,也可以理解我们要执行代码的地方。我们的代码是针对运行环境而写的,只有在运行环境下才能够正确执行。 我们编写的代码就好像是提交的表单,然后获得开户的结果就相当于程序执行的结果。在我们提交表单后银行会审核我们的信息填写格式还有内容是否正确,这就类似于要执行程序前,运行环境会对代码的格式和内容进行检查,包括词法、语法、语义等等。在我们的表单审核合格后,银行会进入开户流程,如果符合开户的条件就能顺利开户。代码也是一样,在确认代码填写正确后,程序就会开始执行代码。如果代码编写符合实际情况,则能够顺利执行。 V8引擎就是完成代码检查和执行的地方,在初始代码经过内置服务库和第三方服务库重新整合代码后,会送入这里执行。在这个过程中,银行会提高填写表单的一些服务,如拍照、信息查询等等这些服务提高用户的办事效率,把用户需要做的一些事情集中了起来。在代码里,这就相当于内置服务库,他把一些功能提前整合好了,用户只需要调用就可以,不需要重新写。此外,类似的还有第三方库,他们也是提供了整合服务,只不过不是由银行或者运行环境提供的, 在银行的开户流程就好像是到房管局查资产证明之类的,而在代码里是通过接口调用来实现的。内置服务库、V8引擎还有提供第三方库构成了完整的JS的运行环境。 编程语言大致上分为两种,一种是编译型语言,这种是先通过编译器将代码编译成可执行的命令,之后送由执行器执行。他们是统一编译之后在执行,所以开发效率低,因为每改动一些代码都需要重新编译。但相对的通过执行器运行的时候就会快很多。而解释性语言是一条一条的进行,编译一条执行一条,所以它的开发效率高,因为每次做了改动,不需要全部代码都进行编译,相对的,运行效率低,因为每运行一条代码都需要编译一次。 从这里可以看出,其实V8引擎做的事情和我们关系不大,我们要做的就是写好代码、用好库。所以学习的方向也是按这个顺序来,基本的先写好基本的代码,之后会使用内置服务库、学会使用第三方库,再之后懂得比较挑选合适的库来最优的完成任务,最后可以自己写开发库、做出以前没有人提供过的功能,再进阶的话就是了解V8引擎的工作原理还有机器码等等。 ================================================ FILE: homework/lesson1/haohu.md ================================================ ###1. 类比代码执行流程 代码 + 库(内置库&第三方库) -> 运行环境(浏览器 or NodeJS) -> 执行结果 种子 + 养分(水&阳光空气) -> 土壤 -> 大树 ###2. 运行环境 可能不准,但能帮助理解: - 电脑硬件是操作系统的运行环境 - 操作系统是应用软件的运行环境 - EXCEL 是 .xls 的运行环境 - flash player 是 ActionScript 的运行环境 - Adobe Air 也是 ActionScript 的运行环境 - 浏览器 是 JS 的运行环境 - NodeJS 也是 JS 的运行环境 - JVM 是 Java 的运行环境 ###3. V8引擎 - Google 出的、高效的JS解释(执行)器 ###4. 编译器/解释(执行)器 - 编译器 是翻译,翻译完了之后你去阅读 - 解释器 是口译,一边翻译一边就说出来 ###5. 内置库 - JavaScript 的官方库,一般是用以实现普遍性的底层的需求 ###6. 第三方库 - 非 JS 官方库,一般是用以实现某垂直、细分领域的需求 ###7. 学习JS的方向 - 万向 ================================================ FILE: homework/lesson1/hewei.md ================================================ # 第一次作业 - 讲座总结 ## 流程优化,事半功倍 徐老师一开始先用`设计银行开户流程`的方式,来**类比代码执行流程**。 笑来老师就说过,一个得体的比喻,可以让人很好地理解一个之前并不了解的概念。 徐老师通过不断地优化银行开户流程,让大家看到了如何改进一个框架的设计,以及因此而带来的效率的提升。 四次的流程优化,将个人和银行(即不同的模块)原本繁琐、重复的任务,进行功能上的不断细分,从而实现更好的模块化——抽离出常用的功能,单独作为内置服务;将预处理和执行模块分离开来,降低耦合;将银行的操作封装成接口,用户只需通过窗口进行输入,然后对窗口的输出进行反馈即可。 > 这只是自己目前对这个流程优化设计的理解,相信经过自己不断的学习,会理解得越来越深刻。就像徐老师说的,做项目不在于多,要在于精。只做一次项目的收获,就能超过别人做好几个项目的收获,这样的项目做得才是最有效果的。 ## 运行环境 用一个不是很到位的比喻来说,**运行环境**就相当于饭馆: 浏览器运行环境相当于饭馆的前厅,Node运行环境相当于饭馆的后厨。 前厅和后厨都有必需的基础设施:水、电,等等,这个可以近似地类比为JS运行环境中的V8引擎。 而前厅和后厨还有各自不同的特色设施:前厅的桌椅,餐具区,茶水区等等,后厨则是做饭的各种区域。这两者可类比为浏览器和Node运行环境的内置服务。 第三方库,则是饭馆本职工作之外的服务,比如火锅店提供的美甲服务,就是这种情况。 ## V8引擎 V8引擎直接将JavaScript代码编译成机器码——所以不管是前端环境比如Chrome浏览器,还是后端环境如Node.js,都有它在背后默默撑起一片天。 接着用前面饭馆的类比方式:不管是前厅还是后厨,水、电等基础设施都是以相同的方式使用的。不会因为是前厅或者后厨,而有所不同。 ## 编译器/解释器 编译器可以类比为中餐的制作过程:我要吃鱼香肉丝,那就需要先备好食材,然后下锅开炒,最后盛到盘子里,供用户享用。 而解释器,可以理解为自助餐:每次只可以要一种食品,吃完了再拿,不能多拿,不能不拿,直到不想吃为止。 ## 内置库 内置库可以理解为各种常见需求的便捷实现方式:想要煮个鸡蛋?好,给你个煮蛋器,分分钟煮好鸡蛋。想要让暂时不吃的食物保鲜?好,放进冰箱,用的时候再拿出来。没有这些工具的时候呢?要煮鸡蛋,自己支起一口锅,慢慢烧水,水烧开了把鸡蛋放进去,看着表,时间到了说明应该煮熟了,然后才拿出来,多麻烦啊! ## 第三方库 唔,写到这里了,怎么感觉上面内置库的理解方式不太对?明天再反刍一下。 ## 学习JS的方向 学习一门语言,语法、框架还是次要的。更重要的,是学会其背后的思想,学会其解决问题的思想。 就像笑来老师,用计算机的思想来类比实际的生活,非常精彩的类比方式! 除此之外,合理的利用各种服务、资源也是非常重要的。 不管是初创企业,还是自己写代码做一些小东西,合理的节约时间和金钱成本也是很必要的。而且利用现有的成熟的服务,可以让我们把更多的精力放在更重要的事情上——实现自己的想法中的关键部分。 比如想做一个博客,主要目的是分享自己的知识,那么完全靠自己写代码实现博客的前后台功能就不是那么的有必要了。找一个合适的博客程序,自己一边写作一边修改,更符合主要的需求。 解决问题的时候,一定要抓住**最重要的**那个因素,优先去解决。就像做饭,好吃、好看不是最重要的,最重要的,是先把饭做熟! ================================================ FILE: homework/lesson1/huangjiashu.md ================================================ ## 写一篇总结 听完课,感受还是颇深的,老师讲的还不错,我觉得最好的就是接待代码如何运作的那个图,就是在ppt中多次提到的那张图。下面试根据老师的提示写的总结  ### 类比代码执行流程 老师拿银行开户的流程类比代码执行流程,还是很恰当的。 由简单的 输入 执行 和 输出。扩展到 运行环境,内置服务和第三方库。类比我觉得很好,也很容易理解。 我觉得也没啥问题,但总感觉在开户流程中,任何一个环节出错了,都会反馈到用户。在第三第四次升级中,我似乎并未体看到这一点。这一点应该可以类比为程序中出现的错误处理或者抛出异常吧。 ### 运行环境 这里的运行环境,应该就是代码的执行环境。类比人所生活的环境,代码运行也处在一定的环境中的。 老师提到 JavaScript的运行环境有两种,一种是浏览器,一种是node环境。如同人类的生存环境 比如说地球吧,为人类提供光照,食物 和 水等必要的生存条件,JavaScript的运行环境也为JavaScript代码的执行提供必要的条件支持,比如V8引擎,比如内置服务等。 ### V8引擎 > V8是一个由美国Google开发的开源JavaScript引擎 > 在运行JavaScript之前,相比其它的JavaScript的引擎转换成字节码或解释执行,V8将其编译成原生机器码(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如内联缓存(inline caching)等方法来提高性能。 由此可见,V8引擎大大提高了JavaScript代码的执行速度,所为引擎就类比汽车的发动机,V8印象中指的也是发动机(8缸发动机,在汽车运行中可以提供更大动力),估计V8引擎也是这么来的吧。当然只是个人臆测。 ### 编译器/解释(执行)器 老师已经讲到,JavaScript是解释型语言,没有明显的编译行为。 而一般的C,C++,Objective-C 等都是编译型语言,其特点是有明显的编译过程。先编译,编译通过后才执行。 而诸如JavaScript解释型语言一般是边编译边执行。 编译器就是将写的代码(通常是高级语言,更接近自然语言)编译成机器能读的懂的机器语言。 > 一个现代的编译器的主要工作流程:源代码 - 预处理 - 编译器 - 目标代码 - 连接器 - 可执行程序。 执行器 就是直接执行编译过的代码文件 ### 内置库 内置库 通常都是环境自带的内置服务,提供开发所需的基本功能,包括基本的数据结构,模块,函数等。 ### 第三方库 第三方库通常是提供一套接口,供开发者使用,而这些接口通常已经实现了许多功能,只需要开发者简单的配置开发即可实现自己的业务需求,也就是说第三方库的很大一个作用就是提高开发效率。即拿来主义。站在巨人的肩膀上进行开发,相比于自己从头做起,当然是事半功倍。 下面是老师给的建议: > 第三方库一般是同种语言开发的拓展功能,以满足多样化的需求。 当然不排除会用其他语言开发第三方库,供JS语言编写的代码调用。 比如: 用C 语音写一个高级算法(因为C语言效率更高),然后开放接口给JS调用。那么这个接口要满足JS语言对C语言的调用规范。 即:两种不同语言之间的调用,要满足一定的规范。这种规范一般只要这两种语言相互认可即可。 Python和C之间的调用又会有他们自己的规范。 在大多数情况下,JS不太会用到其他语言的开放库。在学习过程中只聚焦在JS的第三方库即可! ### 学习JS的方向 想作为一个开发人员,有时候单一的了解前端或者后端是远远不够的,我学习的JS方向是希望既了解前端又了解后端。 并能独立完成开发简单的开发任务。 ================================================ FILE: homework/lesson1/huangqi.md ================================================ ## 总结 ## **2017年8月8日**我跟随老师学习了JavaScript的第一节课,认识了几个概念:“JavaScript的运行环境、V8引擎、编译器、执行器、内置库、第三方库” ,还有一个类比代码执行流程,也打开了我从JavaScript的小小白走向JavaScript菜鸟的大门。 **代码执行流程** 老师生动的用了一个银行开户的类比,让我们知道了代码的执行流程,类比中,我们编写的代码就是一个开户申请单,我们把这个申请单(代码)交给银行(运行环境),银行(运行环境)方面就对这个申请单检查(编译器编译)和执行(执行器),最后返还结果给我们。 **运行环境** 运行环境,就是一个能够使代码调用内置服务的一个环境,里面包含了两个小运行环境;一个是浏览器运行环境,另外一个就是nodejs运行环境。 **V8引擎** 对我们的代码进行预处理和执行的一个黑盒子。 **编译器/解释(执行)器** 一个对我们编写的代码进行翻译的工具,执行器就是对编译器解释完的代码进行执行。 **内置库** 一个支撑各自的业务而设定的库,而且必不可少的。 **第三方库** 支持我们把业务做得更好,更漂亮的库。 **学习JS的方向** 紧跟老师的步伐,和研究JavaScript权威指南,掌握JS编程语言,并用编程的方式调用服务来完成自己的需求。 ================================================ FILE: homework/lesson1/huangxiaohui.md ================================================ javascript第一节课总结 1.1.类比代码执行流程 以银行开户流程为例,将优化后银行开户流程——分为普通用户和VIN用户两大业务模块,类比JS的浏览器和NodeJS这两种运行环境下,代码调用内 置库进行进行编写完成后输入到运行环境进行编译后,再输出到CPU进行执行的流程。 2.运行环境 相对JS来说,由内置库和V8引擎等模块组成的浏览器和Node运行环境 3.V8引擎 对代码编译后,并执行代码的核心 4.编译器/解释(执行)器 V8引擎中对代码进行编译和执行的一个模块 5.内置库 由浏览器和Node内置提供给编写代码的一些功能 6.第三方库 由浏览器和Node两个运行环境以外的第三方提供编写代码的附加功能 7、学习JS的方向 掌握以老师教的ES6编程语言 ================================================ FILE: homework/lesson1/huangzhihua.md ================================================ # JavaScript 第一课作业 总结——黄志华 运用下面这些关键词,把你知道的写出来。 1. 类比代码执行流程 2. 运行环境 3. V8引擎 4. 编译器/解释(执行)器 5. 内置库 6. 第三方库 7. 学习JS的方向 1,代码的执行过程,就像是银行开户流程一样: a,首先需要一个运行环境“银行营业厅”。(比如node) b,然后用户通过“填写表单等方式”,输入(提交)信息。 c,客户的“表格”通过“窗口”传递到“业务员”进行审查,如果不通过着“驳回”。(编译器) d,当“业务员”审查你的表格没有问题,就会帮你进行业务办理操作(解释器/执行)。 e,“业务员”办理完业务之后,就会返回一个结果给客户——“您的业务已办理完毕”。 2,Node是JavaScript的运行环境,浏览器也是JavaScript的运行环境。 一个程序要跑起来,就必须有一个运行环境,相当于一个基础设施,比如说我想要游泳,那么就必须到一个有足够深的水池里进行游泳。 又比如说声音的传播需要介质,在真空中就缺乏这样的”运行环境“,所以真空中无法传递声音。 3,V8引擎: 相当于把一系列复杂的“编译器/解释(执行)器”都打包成一个黑匣子。 这样在编写代码的时候,就会简单很多,这相当于把一些繁琐重复的工作,交给了程序进行内置处理,极大的提高了编程效率。 4,内置库与第三方库: 内置库就是“原生应用app”,自带的一些基础功能库,只保留最重要的部分,这样有利于代码运行的速度与兼容性。 第三方库,在内置库的基础上写代码,有时候会遇到一些特别需求,这时候引入相关的第三方库就可以让代码流程得到极大的简化,有利于编写难度降低。 第三方库的调用,有时候会发现,库中有库,第三方库自己也调用了部分第三方库。这带来一种特别的优势,那就是别人做的很好的事情,比如某一种函数的编写,我们直接调用就可以了,不需要重新再编写一遍,我只需要做我最擅长的与最重要的事情就可以了。 5,学习JS的方向: 我的主要目的是为了可以独立编写一些小程序,比如说微信的小程序,或者是某种轻量的app。 我的英语几乎是零基础,所以也想借编程的这个机会,去实际运用英语,这样最起码我可以有一个比较特别运用英语的环境,为我之后补英语打一个基础。 学习JS未来不一定是一个专业的程序员,但我懂得一点编程技术,可以让我在很多领域里有一个特色技能,并且编程思维是一种非常好的思维锻炼方式,这可以与我的其他能力产生复合效果。 ================================================ FILE: homework/lesson1/huxiaodan.md ================================================ ## 1.类比代码执行流程 类比银行开户流程。用户向银行开户环境提交申请,银行通过内置服务、预处理和执行后,将结果反馈给用户。 ## 2. 运行环境 运行环境提供集预处理、执行于一体的核心业务处理单元,同时还提供内置服务方面用户的业务办理。 JS运行环境有浏览器运行环境和Node运行环境。 ## 3. V8引擎 V8引擎是指对代码进行预处理和执行。 ## 4. 编译器/解释(执行)器 编译器对代码进行词法、语法和语义的分析,以及优化代码。 解释(执行)器对代码进行解释和执行。 ## 5. 内置库 内置库是一组内部服务。 浏览器的内置库有JS内置对象、WebAPI、WebGL、HTTP、WebRTC、canvas等。 Node的内置库有JS内置对象、Node API等。 ## 6. 第三方库 第三方库是由其他机构或个人编写的,有助于开发的服务。 浏览器的第三方库有jQuery、Vue、AngularJS、React等。 Node的第三方库有Express、Koa、Webpack、Promise等。 ## 7. 学习JS的方向 学习JS,前端和后端都可以完成。要了解自己学习的语言,熟练掌握内置库和第三方库,用最恰当的服务实现业务。 ================================================ FILE: homework/lesson1/huyong.md ================================================ 编程第一课总结 #内容分为三个部分 ##第一部分是对与之前预习作业的回顾,点出了大家在写代码的时候常犯的一些错误,比如写代码的时候, 需要用全英文的书写格式,尤其是像引号顿号等的使用 ##第二部分是代码学习的引导和未来的路如何走,开头给了我们一个整个编程学习的准则就是”干“, 然后通过银行的开户流程类比来代码输入得到结果,给出了运行环境:包括浏览器和nd.js的运行环境, 环境,在介绍这俩个环境的时候给出了编译器和解释器,对于环境我们就可以看待成一个黑盒, 不用管他如何执行,我们只需要写出正确的代码,然后检验自己的代码,然后通过内置服务的区别 讲解了浏览器和nd的区别,同样的代码在不同的环境下是得出不同的结果的,无论是浏览器和nd 都有着js内置库,然后给出了第三方库的解释,最后进行了演示。 ##第三部分,我们学习编程之后的路该 如何走,分为三步走,第一步学习,掌握编程语言,用编程 方式调用服务来完成你的需求,第二步提高,了解和掌握重要的服务能力,使其能服务你的业务: 需要对内置库和第三方库有一个深入的了解,第三步进阶,善于比较 服务/技术之间的差异性,用最好的方式实现你的业务,就是比较各种库的差异性,选出最适合你业务的库, ================================================ FILE: homework/lesson1/ianyang.md ================================================ 【第一次作业】写一篇总结 1. 类比代码执行流程 老师以银行开户流程为类比,也可套用其他服务型行业的标准流程,比如物流、零售。这个类比让我认识到,从输入代码到编译执行到输出结果,不仅是商业社会的具体运作方式,也可类比人与人的沟通模式,难怪有“人机对话”这样的比喻。 2. 运行环境 JAVA的运行环境便是指一套完整服务方案的构成要素,它们相互之间有序列也有逻辑和因果关系。其中第三方服务类比的代码库非常关键,这位整个代码进入应用实现了无边无际的拓展性。 而运行环境必须分清是在浏览器环境还是Node环境下,因对应的内置库是独立的。 3. V8引擎 便是业务核心,我的理解,也就是最终要实现的功能。 4. 编译器/解释(执行)器 指C++这类更底层的语言通过编译器与执行器的分离,实现了高运行效率但影响开发效率;解释器则反之; Java语言是通过混合了编译器与解释器来执行代码,这样一个黑盒子究竟如何解释语言不重要,重要的是理解它会如何执行出我们想要的结果,即实现功能。 5. 内置库 内置库是指在不同的运行环境下所内置的不同的可调用实现对应功能的现有代码库(不知这么理解对不对?) 6. 第三方库 第三方库一直会有更新,是开源代码工作者们的集体智慧和贡献(对吗?),而熟悉某一个第三方库能大大帮助我们根据需要实现的功能来选择最合适的库。 7. 学习JS的方向 不需要追求新版本;动手干,边写边练,实践是王道。 ================================================ FILE: homework/lesson1/jaychen.md ================================================ # HW1 Lesson1总结 ## 1. 类比代码执行流程 老师用银行户流程的类比让我瞬间明白了代码执行流程,开场非常精彩!我们输入代码后,调用了内置服务和第三方库对代码进行处理,再把结果喂给核心业务,核心业务类似于黑盒对代码进行预处理执行,相当于银行开户业务中的预处理和审批流程,最终将结果输出。 ## 2. 运行环境 运行环境是为了保障相应业务的运行而所需要的必要资源,不同业务有不同的需求,所以他们的运行环境是截然不同的。针对不同的业务对象,要明确他们环境的差异。 ## 3. V8引擎 V8引擎像一个黑盒子,对输入的代码进行预处理和执行(编译器/解释器),在初学阶段,没有必要对V8引擎过多在意。JS的前端和服务器端开发环境,都由V8引擎进行核心业务处理。 ## 4. 编译器/解释(执行)器 经过编译器编译(相当于银行开户中的预处理)的代码,进入解释器(相当于银行开户重的执行),成为机器可以识别处理的code。有些语言把编译和执行分为明显的两个阶段(如C、C++),这样执行很有效率,但不利于程序员写代码;有些语言把输入的代码直接一条条完成编译和执行的整个过程(JS),这样开发很有效率,但不利于执行。两种处理方式在使用时各有利弊。 ## 5. 内置库 内置库是为了运行相关程序而预先设置好的可以方便进行各种调用的各种模版框架。 ## 6. 第三方库 第三方库是对内置库的补充,是由第三方提供的为了方便程序员对功能实现而能随时调用的框架。 ## 7. 学习JS的方向 要想在JS的学习上持续精进,需要在学习了基础知识和熟悉了各种库的调用后,能够体会掌握各种不同的库在使用方面的细微差别,才能更灵活地使用合适的库进行开发,成为一名高手。 ================================================ FILE: homework/lesson1/jianglin.md ================================================ 1. 类比代码执行流程:代码执行流程就像银行开户,要先确认信息准确(编译)再进行开户操作(执行),对于JavaScript,是边编译边执行,易开发难执行;对于C/C++,是先编译后执行,难开发易执行。 2. 运行环境:运行环境是代码的环境,有各种服务,就像我们生活的环境,也可以区分成各种服务。这个概念要在编程中进一步理解。 3. V8引擎:V8引擎是运行环境的一部分,是用来执行代码的。 4. 编译器/解释(执行)器 :编译器+解释(执行)器是V8引擎的两个功能,具体的原理现在不了解。 5. 内置库:运行环境本身提供的服务。 6. 第三方库:第三方公司等提供的数量庞大的库,可供使用。 7. 学习JS的方向:关于编程,上学时接触过C++和汇编,毕业后再没有过应用。这次学习JavaScript是当做小白学习,一定要专注,专注于老师的任务,网络的内容偶尔可以看看,切勿沉迷于最新的库/信息等。就像上学时学习制图,最重要的是如何制图的原理,而不是纠结于用什么软件来画图,所以初学的时候,图板和CAD04才是最好的朋友。在有一定基础之后,再研究其他的库和已经学习的库有什么区别,逐步掌握更广泛更深入的应用。 ================================================ FILE: homework/lesson1/langjianjun.md ================================================ 第一节课总结 1. 类比代码执行流程 用人去饭店吃饭做类比:饭店类似于软件的运行环境,客人从菜谱上点菜相当于输入某些指令,自动化的点菜系统类似于V8引擎,而厨师则是编译器/解释器,根据菜单做菜相当于执行一系列的程序包,这些程序包属于内置库的一部分,一些秘制的作料或半成品等属于另一部分的内置库;有些酒水菜品等是外购的,相当于第三方库。最终端到客人面前的饭菜是输出。我知道这个类比很粗糙,但要从日常生活中找出一个和程序执行高度相仿的例子来做类比好像也不是很容易。 2. 运行环境 JS的运行环境有浏览器和Node。我去年年底自学JS时只知道有浏览器,Node对我来说是一个完全陌生的环境。 3. V8引擎 JS的引擎,google研发的,最早用于chrome浏览器上,功能强大,号称使JS的运行速度堪比二进制代码。可以独立运行,也可嵌入任何C++程序中。 4. 编译器/解释(执行)器 机器只能识别二进制语言,而人类适合操作的还是类似自然语言的编程语言。因此需要有执行将编程语言转化成二进制语言的工具,这就是编译器或解释器。这转化又有两种方式,一种是高级语言,可执行程序是将源程序编译后形成的,有点精加工食品的感觉,你无法从蛋糕中看出原材料的样子;另一种是脚本语言,就是JS这种的,代码是一行一行边解释边执行的,不会转换成人类无法识别的可执行程序,就像煮玉米或者烤串,你能看懂原料是什么。 5. 内置库 预先编辑好的执行特定功能的模块,因为是随着运行环境提供的,所以叫内置库。 6. 第三方库 由第三方提供的某些特殊模块。 7. 学习JS的方向 想提高自己的自由度和解决问题的能力吧,也想看看40多岁的人能玩会哪些新东西。 ================================================ FILE: homework/lesson1/leizhen.md ================================================ 用银行开户流程类比代码执行过程,通过细分项目和需求,一步一步优化流程,来完成一个完整的框架结构。 我用炒菜的过程来说明我对几个概念的理解(我想了很久,但还是不够贴切) 厨房是一个大的集合:【锅, 燃气灶, 调味料, 食材, 道具, 砧板, etc 】 运行环境:最大的载体,这是最基本的工具。做不同的菜就要用不同的锅一样。煎东西要用平底锅,炒菜的话,就用最平常的大锅子。浏览器运行环境和NodeJS运行环境我觉得和这个比喻类似。 V8引擎:核心部件。类比燃气灶上要点火一样,对食物进行加热(这是核心工具) 内置库:一开始就包含的最基本的东西,管你用不用都在那里。比如:调味料。做菜就是为了好吃啊,为了追求菜的原汁原味,也可以不用的 第三方库:不是必需的,但有的话会很方便。做菜有火就行了,但以前的烧柴火做菜,和现在的天然气做菜。肯定是现在更方便啊! 编译器/解释器:切菜和炒菜的过程就像编译器,炒菜的过程就像解释器。先把一个食材处理好,才好进行下一步的炒菜。而炒菜的过程就简单多了,直接炒就好了,不用处理食材。JS像炒菜的过程,没有切菜直接丢进锅里,当然开发效率高,运行效率低了嘛。 学习JS的方向:我觉得就和做新菜一样。在了解的基本的炒菜过程后(基础),就去多看看别人的菜谱,把菜fork到自己的锅里,自己试一试,味道做得不错了,就可以按照当地人的口味自己进行魔改了。该多了就会对味道有了更深入的了解了。JS也应该差不多,多看看别人的项目,copy/paste 没有提高的。 ================================================ FILE: homework/lesson1/lichen.md ================================================ # 总结 ### 一、引言 #### 1、运用类比:设计一个银行开户流程  #### 2、流程优化的演进     #### 3、开户流程总结  -    ### 二、JavaScript是什么?        ### 1、运行环境 #### 类比     ### 2、概念  ##### (附注:V8引擎是用来处理代码的) ### 3、运行演示 #### 调用inspect   #### 警告实验  #### 4-1、JavaScript该怎么学  #### 4-2、该怎么提高  #### 4-3、该怎么进阶   ##### (附注:我们不要由软件的变化去变化)  ##### (附注:由js语言创造出来的语言有上百种) ### 三、总结  ##### 【注意】 ##### ES是JS编程语言的规范 ##### 运行环境包含V8引擎,同时提供内部内置服务 ##### Node是运行环境 ### 四、代码演进   ================================================ FILE: homework/lesson1/linchunlong.md ================================================ 运用下面这些关键词,把知道的写出来:
1. 类比代码执行流程
2. 运行环境
3. V8引擎
4. 编译器/解释(执行)器
5. 内置库
6. 第三方库
7. 学习JS的方向 **
我的总结是:**
1. 在银行办理开户的流程类比代码执行流程,开户流程有两个主体:个人、银行。个人相当于用户请求服务,银行相当于数据处理的业务环境。用户请出服务请求后,银行根据用户提供的数据,在业务环境中进行处理,并向用户返回处理结果。
2. JS运行环境框架,包括JS运行环境(浏览器运行环境和nodejs环境)、第三方库、JS代码。JS代码,需要放在JS代码的运行环境中执行。
3. V8引擎,内置在JS浏览器运行环境和nodejs运行环境中的处理器。
4. 编译型语言的代码有一个专门的编译过程,可以直接被机器读取语并执行,编译是指人把“人话”编译成“机器语言”,C+、basic、pascal都是这类语言。解释型语言的源代码不是机器语言,是“人话”,所以需要通过解释器翻译成机器语言,才能被机器执行;
结果就是编译型的“机器语言”被机器执行的结果快,对人技能要求是懂机器语言,解释型语言的“人话”优点就是不需要太懂机器,说人话就可以做出来程序,正因为需要中间的翻译过程,导致机器计算结果相对慢一些。
5.内置库存在于JS在浏览器和NODEJS运行环境中,包含了JS代码执行时需要调用到的资源。如果JS是胎儿的话,羊水就是内置库,专门提供JS需要的东西。
6.第三方库和内置库共同构成JS的运行环境,JS偶尔会用到外界的资源处理数据,这个外界的资源就叫做第三方库。胎儿光有羊水还不行,也需要母亲吃食物,食物就是JS的第三方库。(我自己大致这样容易理解)
7.学习JS的方向,增加思考问题的方式,通过JS代码编写过程,渐渐理解需要解决的问题的本质,达到满足某种需求。JS不是为了学而学,写出来的代码要能解决实质的问题。如果JS不能做到就要换其他方式,JS毕竟不是万能的。
了解到JS的局限性在哪里,哪些问题是它能解决的。
================================================
FILE: homework/lesson1/lingxiao.md
================================================
# JavaScript第一次作业
## 前言
2017年8月8日徐高阳老师《JavaScript编程入门》第一次作业。
[TOC]
## 作业
1. 类比代码执行流程
2. 运行环境
3. V8引擎
4. 编译器/解释(执行)器
5. 内置库
6. 第三方库
7. 学习JS的方向
## 解答
### 1. 类比代码执行流程
| 银行开户 | JS代码执行 |
| :--------------------------------------- | :--------------------------------------- |
|  |  |
| **开户环境:** 提供包含接受申请、检验申请单信息和核对资格的服务。
**内置服务:** 为满足用户填写订单时提供的一组内部服务。
**核心:** 涵盖预处理和执行。其中预处理执行开户前进行信息检查的处理过程;执行是执行开户操作的过程,操作完成后返回想要的开户结果。
**第三方服务:** 围绕开户业务的第三方服务以满足用户需求 | **JS运行架构同银行开户过程完全相同:**
1 两类运行环境类比于普通用户和VIP用户环境;
2 V8引擎类比于业务核心;
3 两者都有内置服务,各自支撑业务需求。
4 围绕两个运行环境,有第三方库供调用。 |
### 2. 运行环境
JavaScript脚本的运行环境有两种:**浏览器环境**和**Node.js环境**。
| 浏览器运行环境 | Node.js运行环境 |
| :--------------------------------------: | :--------------------------------------: |
|  |  |
1. JavaScript被定义为浏览器的脚本语言,其[设计的初衷](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513059&idx=1&sn=a2eaf97d9e3000d15a33681d1b720463#rd)是一些本来就应该在浏览器中完成的任务,做一些浏览器与用户的交互和一些网页的特效来补充HTML和CSS的不足。
2. node.js诞生于2009年,是使得JavaScript可以运行在服务器端的运行环境,用于方便地搭建响应速度快、易于拓展的网络应用。
### 3. V8引擎
JavaScript解析引擎就是能够“读懂”JavaScript代码,并准确地给出代码运行结果的一段程序。比方说,当你写了 $var a = 1 + 1; $这样一段代码,JavaScript引擎做的事情就是看懂(解析)你这段代码,并且将a的值变为2。[^1]
V8引擎是Google Chrome浏览器内置的JavaScript脚本引擎,其设计以高效地执行大型的JavaScript应用程序为目的。Chrome仅使用V8的API,其引擎的内核部分独立于浏览器之外。V8引擎用来编译和执行JavaScript源代码,其将JavaScript源代码直接编译成机器码运行。[^2]
### 4. 编译器/解释(执行)器
| 编译型语言 | 解释性语言 |
| :--------------------------------------- | :--------------------------------------- |
|  |  |
| 对于静态语言来说(如Java、C++、C),处理上述代码的叫编译器(Compiler)。
需要一个专门的编译过程,通过编译器编译成机器语言。 | 于JavaScript这样的动态语言则叫解释器(Interpreter)。
**解释器是直接解析并将代码运行结果输出**,边翻译边执行。 |
### 5. 内置库
由两种运行环境提供的服务,用来实现代码功能。就像在中国用人民币,可以直接用。
[JS标准库的部分内置对象的常用属性和方法](https://segmentfault.com/a/1190000004954578)
### 6. 第三方库
由第三方公司或个人提供一套接口,供开发者使用,以实现代码功能。就像是在中国用外币,需要兑换后使用。
### 7. 学习JS的方向
做好笔记,做好课后补充,不怕丢脸多提问题,多操作时间,下足功夫,用心钻研,拥抱JS的美好。Ps: 当我还在困惑于zotero的文献导出怎么设置的时候,在简书上看到一位仁兄2015年的文章,人家已经在github对两个我都不知道怎么用的插件进行修改了,说着一大堆我不懂的术语,于其中看到一个熟悉的字眼,JavaScript,文中说zotero的插件是Js脚本...这刺激我另一次关于编程学习的思考。那我学习编程的目的是什么?就是为了完成私人订制,定制适用于我的代码,让我的生活越来越美好。
[^1]: http://www.cnblogs.com/mrxiaohe/p/5072034.html
[^2]: http://www.nowamagic.net/librarys/veda/detail/1579
================================================
FILE: homework/lesson1/linxiyao.md
================================================
8月8日第一节课,听完感觉秒懂,到做作业写总结却有点傻眼,看来感觉靠不住,于是听了一遍回放,试试用自己有限的理解来描述。
代码执行流程类似于写说明文的过程:代码就像各种特定素材,先输入到大脑,经过大脑这个黑盒进行梳理、阐释(编译、解析),最后输出文章(结果)。两者都有一定的格式,运用(运行)得当时都可以输出稳定且通用的结果,便于交流。
运行环境,是供代码调用、支持代码起作用的的特定环境。JS运行环境有浏览器运行环境、node运行环境。运行环境类似于作者写作时所处的环境总和,比如可以是书房(包括笔记本,书桌椅,大脑等),也可以是卧室(包括笔记本,床,大脑等)。
JS运行环境包含内置库和V8引擎,内置库类似于作者头脑中已有的稳固知识,V8引擎相当于思考,可以调动已知库。第三方库就像Google、wiki、图书馆等,延伸了已知,提供了协作,也减轻了存储负担。而大脑就像解释器吧,你输入红橙黄绿青蓝紫,它返你一个彩色的世界。我不是色盲,我想用JS的大脑看世界。
================================================
FILE: homework/lesson1/lipeng.md
================================================
#### 【第一次作业】写一篇总结
1
**类比代码执行流程**
用户在银行开户的过程,就是代码的执行过程。
这个类比引出了JS运行环境框架,无论是浏览器的环境,还是NodeJS的环境,都包括 业务核心和内置服务。
写JS代码就是,面向运行环境和第三方库,进行编程。
2
**运行环境**
js代码的运行环境,相当于婴儿生活的环境,或者新学生生存的环境,分为浏览器运行环境和 NodeJS运行环境。
浏览器运行环境和NodeJS运行环境,包含了v8引擎,和内置库。
第3方库,不属于运行环境。
3
**V8引擎**
负责JS代码的解释和执行。相当于银行执行开户命令的部门。
4
**编译器/解释(执行)器**
从编译角度区分,这是两类语言。JavaScript属于 解释类的语言,特点是编程效率高。
5
**内置库**
这是JavaScript 自己带的库,分浏览器环境和NodeJS环境。
浏览器的内置库,包括网络库、日志库、JS内置对象、...
NodeJS的内置库包括 JS内置对象,Node API。
6
**第三方库**
第三方提供的,实现一些功能的库。浏览器和NodeJS的对应的第三方库不同。
7
**学习JS的方向**
三个步骤:
> 学会 JavaScript的语法,熟悉 内置库和第三方库
> 用上述技术实现业务需求
> 了解第三方库的优缺点,能找到最合适的解决方案
让我惊讶的地方是,JS竟然是无边际的,竟然有100多种语言 base 在javaScript上。
还是老师的概括更准确:
掌握编程语言,用编程方式**调用**服务来完成你的需求。
了解和掌握**重要的服务**能力,使其能服务你的业务。
善于**比较服务**/技术之间的差异性,用最好的方式实现你的业务。
换一个角度,第1步知道怎么用,第2步知道用什么(重要),第3步 知道用什么最好。
================================================
FILE: homework/lesson1/lipengyu.md
================================================
## 第一次上课总结
本次课程以银行开户流程为例子,由银行的业务架构引出JS的**运行环境**框架,生动易于理解。
### JS运行环境
1. 浏览器运行环境
* V8引擎
* 内置库
2. Nodejs运行环境
* V8引擎
* 内置库
一句话:运行环境包含了**V8引擎**和**内置库**。其中,V8引擎可以理解为一个可以执行代码的黑盒子,内置库就是我们写代码时可以调用的内置服务。
另外,因为内置库的数量和种类有限,这时就要用到功能更加丰富的**第三方库**。
### 两种语言类型
1. 编译型语言
2. 解释型语言
刚开始的开户流程也是**类比代码的执行流程**。
编译型语言代码执行流程大致是:代码--编译器(负责分析词法/语法/语义等)---编译好的代码---执行器(负责解释代码/执行代码)---输出结果。
这种语言的特点是:代码执行考虑高,但是开发效率低。
解释性语言(比如JavaScript)是代码直接到**编译器/解释器**---输出结果,代码执行效率低,但是开发效率高。
### 学习JS的方向
认真和专注。
================================================
FILE: homework/lesson1/litao.md
================================================
第一次课听下来,由于老师用生活中常见的事物进行类比,讲的通俗易懂,使得这些抽象的概念比较容易理解。尽管如此,还是又听了一次回放,才感觉不那么晦涩了。
反而是课前的预习作业,对git工具和GitHub社区的陌生,让我反反复复地阅读老师的操作说明,一次次地练习,慢慢建立起相互之间的逻辑关系,熟悉操作指令,理解每一个步骤的作用,才能将完成的作业提交给老师。
今天再次打开github,发现我之前的作业根本没有提交成功,而且都没有了,就重新再写一次吧。
运行环境:打个比方说就是适应不同人的生活工作学习的环境。而对于编程来说,就是让这个程序语言能够运行的环境,在这个特定的环境下,这个语言才能发挥出作用。对于javascript来说,就是浏览器和node,分别是前端和后端的运行环境。
v8引擎:就好比汽车发动机的核心部位,在这里进行代码的编译和解析。
编译器/解释(执行)器:那就是汽车的发动机了,直接将输入的代码进行编译和解析。
内置库:类似于银行开户时提供的内置服务体系。
第三方库:围绕JS语言开发所提供的许多外围的服务。
学习JS的方向:基础太薄弱,每走一步都要理解补充很多想不到的概念。总算知道了git是一个工具,GitHub是一个开源社区,可以使用git这个工具将GitHub与个人电脑关联起来,进行各种操作,在GitHub上创建保存各种项目,并可以让全世界的软件人员直接在上面进行添加修改,我想GitHub的储存功能应该类似于一个服务器了。而在它上面进行的添加修改的功能则属于GitHub独有的创新了。
这只是我到现在的一些认识,随着课程的推进,会随时刷新改变我的很多认知。
我目前唯一要做的:跟着老师的安排,一步步跟上,完成作业。多阅读理解操作说明,多进行实际操练。
================================================
FILE: homework/lesson1/liujuanjuan1984.md
================================================
## 听新生大学CTO讲JavaScript编程入门-1
by 刘娟娟 2017-08-17
第一课,是切换认识世界的视角,从现实世界切换到编程世界。
用**类比**的方式,来学习新知识,新知识显得那么亲切。_不愧是李笑来老师的新生大学,连CTO都非常热爱类比,并运用的太棒了。_
老师带领我们用银行开户这个类比,来理解编程世界。
我们**去银行开户**,是我们的目的。
我们需要向银行提交资料,拿到卡或者获得不能办卡的理由。这里有一个业务交互的**流程**。
资料是我们向银行提交的数据,拿到卡或者获得不能办卡的理由是银行返回给我们的结果,这个结果也是一种数据。万物皆**数据**。
我们编写代码,正是为了处理数据,获得结果。这是我们目的,有它的业务流程,有它的数据交互。而它们所发生的**环境**,即运行环境。
运行环境,是我们提交代码、运行代码、输出结果所在的环境,有内置服务、解释器和编译器。我们重点要关心服务,解释器和编译器不是我们关心的范畴。_此时A8引擎默默哭晕在厕所。_
编写代码的环境,是**编辑器**。编辑器太多了,每个人都有自己的心头好。比如我曾经爱用notepad++,这次吃了utf-8的亏,按老师建议换成了vscode。
既然说,要重点关心**服务**,那么什么是服务?
就像去了银行,有免费的饮用水、复印机、沙发、大堂经理解释引导之类,帮助我们获得更好的用户体验,在代码的运行环境里,也有各种服务,帮助我们更好的编写代码、处理代码。
记住,服务既有运行环境内置的服务,也有第三方提供的丰富服务。而服务总归是服务,良莠不齐,帮助我们达成目的,但很显然并不是我们的目的。
银行向客户提供了普通用户、VIP客户等不同的服务,或者说,个人业务、公司业务、理财业务等等不同的服务,编程世界也类似。具体如JavaScript,我们这次要学的就有浏览器、node这两个运行环境。
银行在处理开户流程上也有不同的演变,就如同编程语言也有不同的演变。但这不重要,因为我们要学的是JavaScript入门课程。
老师向我们洗脑了3个重要的心法:
第一条,老夫写代码就一把梭子,复制粘贴,**开干**就是!
第二条,把注意力放在最重要的点上,什么是最重要的点?跟着老师的课**划重点**!
第三条,学会老师的**编程思想**,跟着老师引导认真走一遭,而不是东搞西搞花里胡哨。
记住,从零入门,你可以的,我也可以的。老师把自己的底线拉的特别低,并且总是会回答任何小白的问题。_令人震惊的耐心,老师为什么如此做,你和我一样一定也很好奇对吧?_
第一次课程要点:
1、类比代码执行流程 _用银行开户流程这个类比,来理解代码的执行流程_
2、运行环境 _JavaScript的运行环境这次课程学浏览器、node两个,分别对应前端、后端_
3、V8引擎 _忘掉它吧,它但重要但默默无闻,不用关心它是怎么做的,它总是在那儿_
4、编译器/解释(执行)器 _JavaScript是解释型语言,编译器与解释器都已经被封装起来了,就是A8引擎内部的结构_
5、内置库 _运行环境中内置的服务,这些服务打包起来,就是一个一个的库_
6、第三方库 _运行环境之外,由第三方提供的服务_
7、学习JS的方向 _不用怕,跟着老师学,老师教思想、划重点,我们撸起袖子开干_
小结一下,今天记住银行开户流程图,就能理解编程世界的运行环境。
至于怎么学习JavaScript呢,在短短的一个半月12节课程,尽可能多的投入,老实领悟和按老师划的重点去学就好了。
================================================
FILE: homework/lesson1/liujun-sh.md
================================================
# 第一课总结
## 1.类比代码执行流程
代码的执行流程就好比我们去银行办理银行卡,首先你需要填写表格(编写代码),当你在填写表格的时候发现需要打印身份证(打印机就好比内置库,你调用了打印机可以打印图片的功能),如果你还需要办理贷款业务,你需要证明机构用来证明自己有还款能力(证明机构就好比第三方库,可用用它出具的证明才说明自己有能力还款),表格填好后递交给大厅工作人员,大厅工作人员检查申请表格填写是否正确规范(这个过程就是一个预处理的过程),检查没有问题后转交给了窗口工作人员,由窗口工作人员进行征信及资格等校验(这一步就是执行的过程),校验完之后通过发卡/不通过驳回并告知为何不通过(代码输出成功/错误并显示错误信息)。
## 2.运行环境
JS本身就是一个运行环境,在其内部又分为浏览器运行环境和Nodejs运行环境,运行环境是用来处理和执行代码并输出结果。
## 3.V8引擎
V8引擎用来提高代码运行效率、运行速度
## 4.编译器/解释(执行)器
编译器用来分析词法、语法、语义、优化代码
解释器用来解释代码、执行代码
## 5.内置库
编程语言本身自带的工具,可以直接拿来使用。
## 6.第三方库
外部机构提供的工具,使用的时候,需要先导入进来,才能使用。
## 7.学习JS的方向
学习编程语言,使用编程调用服务来解决自己的个人需求或工作需求。
面对问题选择效率最高的工具来解决自己的需求。
================================================
FILE: homework/lesson1/liujun.md
================================================
JavaScript第一课课后总结
1.类比代码执行流程
用银行开户的的流程类比代码执行的流程。用户类比代码,银行类比运行环境,开户流程中的审查、执行类比代码执行中的内置库和V8引擎。
再通过定义板块,环境、内置服务、业务核心、第三方服务。使得与编程流程达到逻辑一目了然。总体上理解了编程的实现过程。
2.运行环境
有web运行环境和Node运行环境二种。前端开发用浏览器运行环境,后端开发用node运行环境。
3、V8引擎
V8引擎就是运行代码的。
4、编译器/执行器
编译器:1.分析词法 2.分析语法 3.分析语义 4.优化代码
执行器:1.解释代码 2.执行代码
5、内置库
是运行环境提供的一组服务,有利于我们更好的实现代码功能。
6、第三方库
由第三方提供的各种各样的服务,更好地促进我们的代码功能的实现。
7、学习JS的方向
小白阶段
谨记“掌握编程语言,用编程方式调用服务来完成你的需求。”
提高阶段
“了解和掌握重要的服务能力,使其能服务你的业务。”
进阶阶段
“善于比较服务/技术之间的差异性,用最好的方式实现你的业务。”
================================================
FILE: homework/lesson1/liuliyuan.md
================================================
# 第一节 JavaScript编程入门 课程总结
###一、关键词
1. 类比代码执行流程
2. 运行环境
3. V8引擎
4. 编译器/解释(执行)器
5. 内置库
6. 第三方库
7. 学习JS的方向
###二、课程总结
以在银行开户类比代码流程开始课程:
开户流程:我们将申请递交给窗口,然后得到我们的银行卡;
代码流程:我们将代码输入运行环境,然后得到我们的结果。
在这个过程中,窗口和运行环境对于我们就是**编译/解释(执行)器**,我们不需要知道其中的原理,只要其可以输出我们想要的结果即可。
但由于流程太过简化,所有工作由一个人或者单单引擎完成的话,会导致速度缓慢,不利于用户体验,所以通过对其流程不断优化,最终达到:
- 客户的友好性:第三方服务搞定复印等业务;然后客户在业务窗口会得到满足用户填写订单时提供的一组内部服务,也就是直接跟你交流的业务员的服务;
- 分工明确:分管不同类型客户的窗口,比如普通用户窗口和VIP用户窗口;每个窗口内部分工明确,有帮助你填写订单的业务员(内置服务)和资料审核人员(业务核心)
**类比代码执行流程**,也就得出了JS的运行环境:
- 用户的友好性:用户只需要敲入代码调用内置库、第三方库进行输入即可;
- **运行环境**:运行环境分为浏览器运行环境和nodejs运行环境;各个运行环境中又都有内置库和V8引擎。
**V8引擎**:进行代码预处理以及执行,就像我们在办理银行业务时只跟坐在窗口的业务员打交道,而不跟后方核审资料的人打交道一样,我们在用JS的时候,也只是用代码调用内置库和第三方库进行输入,而不用知道V8引擎怎么工作;
**内置库**:不同运行环境的内置库不尽相同,但浏览器和nodejs的相同内置库是JS内置对象;
**第三方库**:由其他公司或者开源形成的对于我们完成工作有帮助的服务库。
在基本了解了JS这种解释性语言后,针对这种语言的特性,得出自己的**JS学习方向**:
- 个人情况:自己是小白,对于编程了解甚少,需要从最基本的学起。
- 学习流程:
>1、基本了解JS语言与其他语言的相同及不同
>2、尽快熟悉JS语言中基本的命令,能够较熟练
>3、了解内置库和第三方库
当然这些是基于现在的知识所订出的流程。之后跟上老师课程,及时发现自己的不足并加以改正,希望能在课程结束后有完整的提高计划。
================================================
FILE: homework/lesson1/liuqing.md
================================================
# 第一次课程总结
在完成徐老师布置的课前预习作业时,还一脸懵圈,只知道生搬硬套过来,虽然还是完成了,也有了学习编程的信心,但是对开始的编程课还是有些忐忑,生怕自己听不懂。
没想到小白的编程之旅——第一堂课会是以“银行开会流程”来切入的,跟着老师的思路,信心马上就提升上来了。整个1个半小时下来,虽然仍有不明白的地方,但是对JS编程终于也有一些感觉。
再加上回看了几遍,补充了一些断层知识和概念,下面就对第一堂课的学习内容进行一下总结。
## 一、梳理课程所学概念及内在逻辑
第一堂课主要通过类比“银行开户流程”的方式,认识了JavaScript运行环境框架及其涵盖的概念,以及代码解释、执行的基础流程。
### 1. 所学概念
“银行开户流程”的业务架构与JS的运行环境架构非常相似,JS的运行环境架构主要由内置库、V8引擎组成,再加上一个第三方库,JS代码就能运行起来
- 运行环境:JS代码能被执行的前提,就像植物需要土壤才能长出花草一般,有了运行环境,代码才能通过计算机实现操作意图。JS的运行环境分为web端和nodejs在不同运行环境中,有不同的功能。
- V8引擎:属于JS运行环境中的核心,主要用来执行代码,JS代码被编译成计算机能懂的指令后,再执行代码。就像汽车的发动机,把燃油转化成汽车所需的动力。
- 编译器、解释(执行)器:JS作为一种编程语言,在输入端,由程序员来编写,然后V8引擎来执行代码。PS:JS属于边解释边执行的编程语言,开发率较高,但是运行效率较低。
- 内置库:类比为“银行开户流程”中的内置服务,为输入进来的JS代码提供一些额外的加成服务,对输入进来的代码进行一些预处理,方便V8引擎执行代码。
- 第三方库:类比理解为第三方服务,为主业提供一些直接可以调用的功能便利,转嫁一些风险。第三方库的作用同样是为JS代码提供一些方便执行的功能。
而不是要求JS什么功能都具备
### 2. 课程内在逻辑框架搭建
- 流程:(代码+调用内置库和第三方库)→V8引擎编译、解释(执行)→输出结果
- 框架:运行环境包括内置库+V8引擎+第三方库,按照前、后端又分为浏览器运行环境和nodejs运行环境,在前、后端内置库的共同点都有内置对象
### 3. 课程中有所启发的学习方法
老师通过类比“银行开户流程”来告诉我们JS运行环境架构,其中有一个思路值得借鉴。
- 设计流程→优化流程→定义流程→抽象出框架
### 4.学习JS的方向:
一开始认为JS是专业人士的专用工具,后面加入新大之后,认识到编程的思维其实每个人都应该学习、具备,因为这是一种机器智商,关于人如何操作机器去高效完成工作,实现自己的意图。
编程语言是人和机器沟通的工具,就像不同国家的人使用不同语言一样,学会了编程,能与计算机沟通。JS作为一种前端、后端都能使用的语言,学习JS既要学会编程的思维,又需要出成果。
所以JS学习的方向是,掌握好JS的基础知识,以微信小程序为目标,实际出一个成果。
## 二、预习作业实际操作中存在的问题
- github网页和终端使用流程:
1. git clone URL→本地修改→git status查询状态→git add 添加→git commit -m"提交日志信息"→git push origin master推送到远程
2. fork到自己的仓库→编辑、修改(网页版git上操作)→pull request给老师
- 存在问题:
1. 没搞清楚GitHub是搞什么的,先用再说吧
2. 在pr的时候,是直接在网页上操作的,没clone到本地仓库操作后用终端推送远程。
有个疑问:如果clone到本地仓库进行编辑修改,文件扩展名是.md这个是不是需要找个专门的编辑器来打开使用呢?
================================================
FILE: homework/lesson1/liuruyong.md
================================================
#1. 类比代码执行流程
高级语言写的代码 > 编译后的中间代码 > 不同平台的机器码 > 机器指令
中央文件 > 官僚系统传递 > 各地根据当地情况做解读 > 群众去执行
#2. 运行环境
运行时需要的支撑环境,运行依赖的库。
#3. V8引擎
wiki解释
> V8在运行之前将JavaScript编译成了机器码,而非字节码或是解释执行它,以此提升性能。更进一步,使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序与V8引擎的速度媲美二进制编译。
我的理解:v8引擎厉害的地方,方便代码书写的同时,没有降低代码执行的效率。
#4. 编译器/解释(执行)器
编译器把高级语言编译为二进制文件,二进制文件加载到内存执行
解释器在运行时才进行代码的解析。
#5. 内置库
只有安装相应环境就包含的支持程序运行的最小代码库
#6. 第三方库
遵守相应规范开发的非官方代码库,实现官方库未实现的功能。库的质量由开发者能力决定。
#7. 学习JS的方向
基础语法+常用库+编程思想
================================================
FILE: homework/lesson1/liushengsi.md
================================================
# 小白学JavaScript:JavaScript的怎么玩儿?
#### JavaScript是怎么一回事儿?
###### 1. 银行办理业务类比JavaScript执行代码
回想一下我们在生活中是怎么办理银行业务的:
- 我去到银行,准备在叫号机上取号,这时我发现叫号机上有“个人业务”、“对公业务”可供选择。因为这次是为自己开户,所以我选择了“个人业务”。顺利拿到号,正准备静静等候......
- 这时大堂经理过来询问我要办理什么业务,在得知我要开户后,大堂经理让我填写开户申请表,并准备好身份证复印件等材料
- 复印身份证?糟了!我来之前不知道所以并没有复印。这时大堂经理告诉我说不要紧,银行大堂就提供复印服务,免费!😄太好了!顺利复印好身份证,准备好所有开户所需要的材料。静静等候叫号......
- 终于到我了。快速走到窗口,告诉柜员我要开户并递上了所有准备好的材料。柜员顺利地帮我开通了账户,并交给我一张银行卡。嗯,开户到这里就办完啦!效率还算不错,等待时就准备好了所需材料,减少了很多在窗口等待的时间。
- 正准备离开银行,突然发现大堂的另一侧有保险相关的柜台。我想了想觉得保险这个东西最好还是买一份,于是我走向了保险柜台去办理保险业务。办理过程中得知这家保险公司支持用我刚办理的银行卡付钱,这真是太方便了,于是顺利购买了一份保险。
以上就是我们去银行办理个人业务时会发生的场景,当我们办理的不是个人业务而是别的业务时,有些具体的服务内容和业务内容会发生变化,但是办理流程基本不会变。
这跟JavaScript有什么关系呢?JavaScript玩儿起来就是这样的啊!
- 你要用JavaScript做事情了(你去到银行准备办业务了)
- 你要实现前端功能,JavaScript启动浏览器运行环境(你要办理个人业务,银行走的是个人业务流程);你要实现后端功能,JavaScript启动Node运行环境(你要办理对公业务,银行走的是对公业务流程)
- 不论要实现什么功能(不论什么种类的业务),你都需要做一些准备工作(大堂经理预先让你准备好所需材料),准备过程中需要用到一些JavaScript的内置库提供的服务(银行提供的打印服务)
- 写好了代码,不论前端还是后端,都送到各自运行环境里的V8引擎去执行(银行办业务的窗口),V8引擎里的解释器一边解释一边执行代码(窗口的柜员一边看材料,一边进行一步步操作,比如输入新开的账户的户名等),V8引擎执行完毕,输出结果(窗口的柜员办理业务完毕,交给你属于你的银行卡)
- 我要增加一个功能,JavaScript的内置库没有提供这个服务(我要买一份保险,可是银行不卖保险),于是我调用了第三方库,第三方库提供这个服务(于是我去了保险公司,他们卖保险)
这样一类比,JavaScript怎么玩儿的是不是就相当清楚明了了呢?😄,我自己是觉得很清晰了的。当然,还需要在后续过程中不断去通过实践来不断加深理解。
###### 2. 我的JavaScript学习方向
理解了JavaScript的玩儿法,我接下来的得明确自己在JavaScript这条路上的玩儿法了。
首先,作为一只小白,我该怎么学JavaScript呢?
>要掌握一门编程语言,就是要能够用编程的方式调用各种服务来完成我的需求
其次,我该怎么提高呢?
>要了解和掌握重要的服务能力,让它能够服务我的业务需求,即要熟悉内置库和第三方库
之后,我该怎么进阶呢?
>要做到善于比较服务/技术之间的差异性,用最好的方式去实现我的业务
学习JavaScript的难点是什么呢?
- 变化快:应对这一点,作为新手的我应该聚焦ES6,对于ES7、ES8等稍微关注下就好
- 无边际:这一点只能在后续学习和使用中去慢慢体会、摸索了
最后,想引用屈原的一句话来说明一下我当下的心情,并与同学们共勉!
>路漫漫其修远兮,吾将上下而求索
================================================
FILE: homework/lesson1/liushengxin.md
================================================
# 开始学习javascript第一节课总结
## 1. 类比代码执行流程
代码其实就是把现实中的流程规范化,通过类比、对两者都加深了印象。一是现实生活中你觉得寻常的流程其实都需要严密的逻辑、也可以进一步的升级,可以加快流程的进度。二是学习代码就是认知流程的过程,只有逻辑可行、代码才会运行、要不只有崩溃。
我从中学到了几点:
1. **类比可以让人从未知到已知**,因为以前没有代码的概念,如果直接讲解代码会一头雾水,通过用已知代替未知、才会深刻的理解未知的事物。
2. **每件事都可以深入思考**。 银行流程有很多事情可以改进、生活学习中也有很多事情可以改进、画好流程图、可以突破自己
## 2. 运行环境
JS的运行环境有两类:浏览器运行环境和nodejs运行环境。两类运行环境都有V8引擎和各自的内置库。
就像我们人类、活着需要自然环境、需要空气和水。这是我们生存的前提、但是热带和寒带的环境也稍有不同、所以一个地方需要光着膀子、另一个地方需要穿上大衣。
## 3. V8引擎
V8引擎我类比成意识和大脑的关系,意识需要大脑的代码处理才能变成身体能够执行的神经脉冲、就是代码。
V8引擎是识别你整个语言逻辑的框架。
## 4. 编译器/解释(执行)器
编译器就是把别人听到的话、转变成自己的行为的过程
说起来就是把你能理解的编程语言、翻译成机器能理解的语言、就是一个翻译执行器。
## 5. 内置库
内置库就相当于我们的眼睛库、耳朵库、手库、脚库、大脑调用这些库就可以看见东西、听见东西、我们的大脑识别了猫。以后看到猫就可以直接调用这个库。
## 6. 第三方库
第三方库就相当于小时候背的诗、读的文章、虽然都是别人的、但我们写文章的时候也可以拿来用。
## 7. 学习JS的方向
编程就是另一个语言、就相当于英语。不会编程、就不会和电脑沟通,这个世界你只能了解你了解的那一小部分。
================================================
FILE: homework/lesson1/liuxiaohaohao.md
================================================
Title: JavaScript第一次总结作业
Created On: 2017-08-11 19:43:28 +0800
其实,来学这门课是想要逼自己一把,觉得自己太久没有从零开始学什么东西了,想要找回一种学生时代的认真感吧!
“怎么说呢,技术一点都不难,主要是方向感,拿起键盘就开干!”
老师说这话的时候,我就觉得特靠谱。好多时候多说无益,多做才是硬道理。
代码的执行流程是怎样的?
其实,就像是银行开户一样,你需要有很多操作,有一定的顺序。代码执行需要一个运行环境,这个运行环境就像是银行。
有了环境之后,代码跑起来需要有一个核心服务,V8引擎就来干这个工作,就相当于银行窗口内部的核心工作人员。V8引擎就相当于银行的核心业务,对代码进行预处理。
同时,代码的执行,还需要有一些内置的服务,相当于银行帮忙复印拍照的业务,虽然不是核心,但也不可缺少,方便代码正常的执行。
代码的执行,会用到一些第三方库,它不在JS的运行环境里,但JS代码的执行需要它的帮助,就像银行会有一些第三方的服务,而这些资源不属于银行本身,但你办业务时可能会用得到。
这么来看,代码的执行只是三次元世界里的一个变体,如果我们把代码的世界当作是日常,三次元世界,其实就是代码的具象化。突然想起了数码宝贝里游戏世界的具象化。
编程语言分为编译型语言和解释性语言两种。编译型语言,就像银行的开户流程一样做了几步,需要输入代码到编译器,然后输出,再输入到执行器里,输出执行结果。而解释性语言就比较简单,一步到位,输入到编译器解释器,然后输出结果,就OK了。
编译型语言和解释性语言相比较的话,前者是运行效率高,但开发效率低。后者是开发效率高,运行效率低。JS属于解释性语言。
内置库在我看来,就是自己家帮忙做事的小伙伴,而第三方库,就是别人家的小伙伴,但是也可以拿来帮忙做事的。
其实,学什么都需要做到独立思考。新手刚开始需要照葫芦画瓢式的学习,但是一旦掌握了规则和一些技巧之后,你就要开始做点自己的东西。基础打好了,可以让你吃上饭,但是想要成为牛逼的人,需要多问自己“为什么”,“技术的差异性在哪里”,“还可以怎么做”?等等一些,给自己开脑洞的问题。
================================================
FILE: homework/lesson1/lixiang.md
================================================
运行环境就像是一个人的大脑,负责处理接收到的信息,比如一条新闻,一个故事。
V8引擎是人脑中最智能的核心,至于它具体是怎么工作的,诸如神经元之间的链接之类,我们现阶段不需要掌握。
编译器就像是人脑里的语言模块。一老外跟自己说话,他的话就是一串代码,人脑分析完语法语义之后,整理一下,用自己语言表述出老外说了啥。
执行器就相当于,老外跟自己说话,听懂以后,按照他说的话去做了,而不只是停留在理解的层面。
内置库就像人脑里装了不同学科的内容。来西班牙语就调用西班牙语的库理解和分析,来了天文学的知识我就调用天文学的背景知识 。
第三方库就类似书本,在线课程,给自己在处理信息的时候添加辅助工具。
学习JS就是给自己脑子里增加多一个,甚至在此基础上发展出来N个,内置库;方向就是最简单朴素的:认真上课/写作业/研习课本/从错误中总结提高。要有耐心,要有恒心,脚踏实地!
================================================
FILE: homework/lesson1/lixiaoxin.md
================================================
# Javascript 初探
## 【第一次作业】
运用下面这些关键词,把你知道的写出来。
1. 类比代码执行流程
2. 运行环境
3. V8引擎
4. 编译器/解释(执行)器
5. 内置库
6. 第三方库
7. 学习JS的方向
报名这门课时,我对JavaScript基本一无所知,只知道它是一种程序语言,Google了JavaScript,在维基百科看到了如下简介:
> JavaScript,一种高级编程语言,通过解释执行,是一门动态类型,面向对象(基于原型)的直译语言。它已经由ECMA(欧洲电脑制造商协会)通过ECMAScript实现语言的标准化。它被世界上的绝大多数网站所使用,也被世界主流浏览器(Chrome、IE、FireFox、Safari、Opera)支持。JavaScript是一门基于原型、函数先行的语言,是一门多范式的语言,它支持面向对象编程,命令式编程,以及函数式编程。它提供语法来操控文本、数组、日期以及正则表达式等,不支持I/O,比如网络、存储和图形等,但这些都可以由它的宿主环境提供支持。
> 虽然JavaScript与Java这门语言不管是在名字上,或是在语法上都有很多相似性,但这两门编程语言从设计之初就有很大的不同,JavaScript的语言设计主要受到了Self(一种基于原型的编程语言)和Scheme(一门函数式编程语言)的影响。在语法结构上它又与C语言有很多相似(例如if条件语句、while循环、switch语句、do-while循环等)。
> 在客户端,JavaScript在传统意义上被实现为一种解释语言,但在最近,它已经可以被即时编译(JIT)执行。随着最新的HTML5和CSS3语言标准的推行它还可用于游戏、桌面和移动应用程序的开发和在服务器端网络环境运行,如Node.js。
意料之内地———基本看不懂,因为定义里面还嵌入了无数不懂的名词,而大脑无是法用未知解释未知的。倒也不慌,就跟着新大的JavaScript入门课,一探究竟吧。
第一节课,老师以银行开户流程类比代码执行流程,让我们迅速了解了JS运行的整体架构,
关键词:
- 环境
- 内置服务
- 核心
- 预处理
- 执行
- 第三方服务
此外透过银行开户流程的改进过程我还学到了:
1. 对于重复事件,要有设计流程思想;
2. 流程不是设计出来就完了,还要不断优化
这正是我想踏入编程世界的初衷之一,即利用编程把自己从重复劳动中做解放出来。
而在使程序自动运行之前,需要对一整套流程做梳理和优化,才能使程序执行更合理及高效。
- 运行环境
如同人到一个陌生环境不是要急着行动,而是要先熟悉周围环境,知道自己在这个环境里有什么资源可以利用,要学习JS,首先也应该对JS处在什么环境、有什么资源可以调用有一个基本的了解。
运行环境有两种:浏览器和Nodejs,它们都有自己的核心(V8引擎)和内置服务,以及对应的可以调用更多服务的第三方库。
需要注意的是,浏览器和Node的运行环境是不一样的,各自提供的服务(包括内置库和第三方库)是不一样的,唯一一个共通点是两者具有一样的JS内置对象。
另外作为核心的V8引擎,老师说了对于新手,不需要知道它的运作原理,只要知道V8引擎是用来做对代码进行预处理和执行的就行了。
- 编译器/解释(执行)器
编译型语言,先编译后执行,需要专门的编译过程,通过专门的编译器翻译成机器语言,因此开发效率低,运行效率高;
解释性语言,边解析边执行,因此开发效率高,运行效率低。JS是解释性语言。
- 内置库
内置库简单来说,就是运行环境提供的内置服务,JS的内置库包括:网络库、日志库、JS内置对象,等等。
- 第三方库
第三方库,我理解的就是各种第三方(除了”我“、JS运行环境外的第三方)提供的更为或便捷或强大的服务,不需要自己从头设计、制作。比如穿衣服,不需要买布料自己做,只需要到服装店买回来穿就是了。
- 学习JS的方向
对于JS的学习方向,老师给了一些方向:
该怎么学习?
> "要掌握编程语言,用编程方式调用服务来完成你的需求。"
我的理解是,在入门阶段,学习内置库和第三方库的功能,这个阶段,要能够通过调用内置服务和第三方服务写出代码,并让代码能够跑起来,成功实现需求功能。
该怎么提高?
> "理解和掌握重要的服务能力,使其能服务你的业务。"
我的理解是,在入门之后,要学习和积攒一些重要的高频小套路,快速实现业务功能需求。
该怎么进阶?
> "善于比较服务/技术之间的差异性,用最好的方式实现你的业务。"
我的理解是,在进阶阶段,对于实现某一个业务需求,应该要会不只一种方法,并且能对比出不同方法、路径的优劣,从而知道最短路径、最优选择是哪一种。
================================================
FILE: homework/lesson1/liyihang.md
================================================
#1. 类比代码执行流程
类比银行开户,加入了计算机的部分概念思想,如预处理,封装,uml图
输入-》处理-》输出
#2. 运行环境
Javascript的运行环境有,浏览器和node
VC的运行环境就是runtime, 包含各种dll等,如msvc.dll
#3. V8引擎
google开发的java引擎,用于客户的,服务端,可高性能的编译执行
#4. 编译器/解释(执行)器
编译器,把源代码,编译、汇编和链接,输出为机器码的目标程序,运行时就直接运行机器码
解释器,把源代码产生易于执行的中间代码,在运行时进行解释
编译型语言:c c++
解释型语言:javascript,lua,python
#5. 内置库
运行环境自带,如 数学math库
#6. 第三方库
如算法库,控件库,组件库。
#7. 学习JS的方向
js用于网页开发,移动端开发,后端开发。
================================================
FILE: homework/lesson1/luoruijun.md
================================================
# 第一课作业
1. 代码的执行流程:输入代码到运行环境,调用运行环境中内置库的服务,或调用第三方库的服务,送入运行环境中的v8引擎进行预处理和执行。
2. 运行环境是代码执行的环境,提供内置库的服务和v8引擎对代码的预处理和执行。JS运行环境有nodejs和浏览器运行环境。
3. v8引擎的作用是运行环境中对输入的代码进行预处理和执行,包括编译器器和执行器,编译器进行分析此法、语法、语意、优化代码,解释器进行解释代码、执行代码。
4. 内置库提供内置服务,内置库例如:网络库、日志库、JS内置对象等。不同运行环境等内置库包括等服务不同。
5. 第三方库包括jQuery、Vue、React等。
6. 学习JS的分不同的阶段,方向是掌握编程语言,掌握调用服务。第一阶段掌握编程语言,能用编程调用服务完成需求;第二阶段是了解掌握重要的服务能力,使其服务于业务。第三阶段是善于比较服务/技术之间的差异性,用最好的方式实现业务。
================================================
FILE: homework/lesson1/maggiewong.md
================================================
# 作业1——总结第一节课的内容
1.类比代码执行流程
将代码执行流程和银行开户类比:JavaScript的运行环境分为浏览器运行环境和Nodejs运行环境,针对这两个运行环境有各自的核心V8引擎和内置服务,有一大批第三方库满足JavaScript代码的调用
2.运行环境
运行环境是一个可以执行代码的黑盒,分为编译器和解释器。V8引擎只是运行环境里很小的一部分,核心是内置库。JavaScript的浏览器运行环境和Nodejs运行环境内置库不一样,调用的第三方库也不一样,其提供的服务是有差异的——浏览器运行环境是前端,Nodejs运行环境是后端。
浏览器运行环境和Nodejs运行环境有一个共通的内置库JS内置对象,提供了一组JavaScript语言的特性。
3.V8引擎
V8引擎是对代码进行预处理和执行的核心。
4.编译器/解释(执行)器
编译器对输入的代码进行编译,即分析代码的词法、语法和语义并优化代码。
解释器对编译好的代码进行解释和执行,是V8引擎的一个组成部分。
对于编译型语言,如C语言,编译器和解释器是分开按顺序运行的,编译器将代码编译成机器语言再去执行代码,工作流程类似于银行开户流程优化版四。特点是运行效率高但是开发效率低。
对于解释型语言,如JavaScript和Python,编译器和解释器的运行是一次性完成的,不会对整个代码有明显的编译过程,工作流程类似于第一版简易银行开户流程。特点是开发效率高但是运行效率低。
5.内置库
由运行环境提供的一组实现代码功能的服务。
6.第三方库
由很多的公司、个人提供的商用或免费开源的库,提供比内置库更强大完善的功能。
7.学习JS的方向
初学者的方向是**掌握编程语言**,用编程方式调用服务来完成需求,这是学习的第一步。提高的途径是**了解和掌握重要的服务能力**,使其服务你的业务。了解第三方库的功能。进阶的方法是善于比较服务/技术之间的差异性,**用最好的方式实现你的业务**。思考有没有另外的库能解决这个问题,哪个更好。
================================================
FILE: homework/lesson1/panqi.md
================================================
#第一次课程总结
##代码执行流程:编写代码,解释并执行,输出内容。
##JS运行环境:多样化,浏览器(前端)和Nodejs(后端)两种环境,拥有相同的JS内置对象,不同的内置库和第三方库。
##V8引擎:用于完成预处理和执行等核心任务。
##编译器/解释(执行)器:和英语翻译类似,编译器好比是将英语翻译成中文的工具,要先有英文输入、在工具内发生变化、最后输出中文;而解释器好比是同声传译,边听边译、随听随译,工作具有同步性特点。
##内置库:属于自带资源,能够满足常规和经常使用的需求。
##第三方库:属于外部资源,进一步扩大了可用资源范围,以满足多样化、差异化的开发需求。
##学习JS的方向:
###初级——掌握编程语言,用编程方式调用服务来完成你的需求(有如小孩子学说话、中国人学外语,学习JS语言也要多学多练多琢磨,熟练运用、扎实掌握、内化为自己的一部分,才能充分有效利用各种资源,信手拈来、满足需求。)
###提高——了解和掌握重要的服务能力,使其能服务你的业务(JS有很多资源、功能,结合自身的需求,有针对性地突出重点,单点突破、纵深延展。)
###进阶——善于比较服务/技术之间的差异性,用最好的方式实现你的业务(正所谓条条大路通罗马,业务需求的解决路径和方案也非唯一,随着学习的深入,权衡各种方法的利弊得失,综合判定选择最适合的)
================================================
FILE: homework/lesson1/panyong.md
================================================
# 【第一次作业】写一篇总结
运用下面这些关键词,把你知道的写出来。
1. 类比代码执行流程
2. 运行环境
3. V8引擎
4. 编译器/解释(执行)器
5. 内置库
6. 第三方库
7. 学习JS的方向
## 总结
现在是8月29日凌晨,回想8月8日那一节课,回放已经关闭了...
记得开课前,课程留言里有推荐这篇文章,[《在 2016 年学 JavaScript 是一种什么样的体验?》](https://zhuanlan.zhihu.com/p/22782487),看完就晕了,感觉要掌握JS好复杂。
老师上来,就贴了一张非常有执行力的图:不要给我说底层原理,框架内核,老夫敲代码就是一把`梭`!复制!粘贴!拿起键盘,就是`干`!然后开始讲框架内核。
从类比说起:银行开户流程,针对流程上存在的问题,一步一步优化,得到了一个高效的银行业务框架。而这个银行业务框架,和JS运行框架正好类似。
### 1、先说js运行环境(V8引擎+内置库)
#### V8引擎
js有`浏览器行环境`和`Nodejs运行环境`两个运行环境。就像银行开户时,有`普通用户开户环境`和`VIP用户开户环境`一样。`普通用户开户`和`VIP用户开户`,最核心的功能就是开户。`浏览器`和`Nodejs`,最核心的功能就是解释执行js代码,由V8引擎完成。
#### 内置库
`普通用户`和`VIP用户`去银行开户是,享受的服务是不一样的(当然,这里类比的重点不是VIP享受的服务更优越,类比的重点是二者享受的银行服务是不一样的),就像`Nodejs运行环境`提供处理文件服务`var fs = require('fs')`,而`浏览器行环境`为了安全是不允许访问本地文件的,另外`浏览器行环境`有`alert()`,这个服务又是`Nodejs运行环境`所没有的。也就是说运行环境内部提供的服务,就是内置库。
### 2、再说第三方库
`普通用户`和`VIP用户`,除了开户以外,还有第三方需求,也就是银行不提供但是用户又需要的需求,比如绑定支付宝、公积金卡、医保卡、金融产品、股票,这些服务都和银行卡关系,但又需要银行之外的第三方来提供服务。`普通用户`主要需要的第三方服务可能是绑定支付宝。`VIP用户`需要的第三方服务可能是购买海外股票。也就是说,不同的用户,需要的第三方服务不同。`浏览器`主要的第三方库是和前端相关的,比如jQuery、Vue、React等。`Nodejs运行环境`主要的第三方库是和后端相关的,比如Express、Koa等(这些具体是什么?后续再了解)
### 3、学习JS的方向
学习JS的难处在于`JS变化快`、`JS无边际`。所以,学习JS首先要又一幅地图,上面类比中的`V8引擎`、`内置库`、`浏览器第三方库`、`Nodejs第三方库`就是地图,可以随时让你知道自己在哪里而不会迷路。
初学:先掌握编程语言,用编程调用服务(内置库,第三方库)完成需求。
提高:掌握重要的服务能力,使其能服务于重要业务。
进阶:善于比较服务/技术直接的差异,懂得用最好的方式实现业务。
================================================
FILE: homework/lesson1/qiujingyu.md
================================================
#### 第一节课作业:总结
##### 1. 类比代码执行流程
与银行开户流程进行类比:
+ 用户相当于程序员
+ 普通用户相当于:开发前端使用js的程序员
+ VIP用户相当于:开发后端使用js的程序员
+ 开户申请相当于代码
+ 银行相当于JS运行环境
+ 普通用户的开户环境相当于浏览器运行环境
+ VIP用户的开户环境相当于Nodejs运行环境
+ 业务核心相当于V8引擎
+ 内置服务相当于内置服务
+ 第三方服务相当于第三方库
+ 改进版的开户流程相当于C语言等编译型语言即C语言,编译器与执行器分开,运行效率高,开发效率低
+ 传统的开户流程相当于JavaScript等解释性语言,编译器/解释器兼具有执行器功能,开发效率高,运行效率低
##### 2. 运行环境
指处理JS代码的环境,包括浏览器的运行环境与Node的运行环境。
##### 3. V8引擎
由美国Google开发的开源JavaScript引擎,用于Chrome浏览器中。目的是编译和运行JS源代码,处理对象内存分配,对不再使用的对象进行回收。
##### 4. 编译器/解释(执行)器
编译器能分析词法、语法、语义,并优化代码。
解释(执行)器能解释代码、执行代码。
##### 5. 内置库
JS本身提供的用于实现相关功能的模块。
##### 6. 第三方库
国际标准化组织(ECMA)以外的个人或组织为JS开发的能实现相关功能的模块。
##### 7. 学习JS的方向:
+ 对初学者来说
> 掌握编程语言,用编程方式调用服务来完成你的需求。
+ 对提高者来说
> 了解和掌握重要的服务能力,使其能服务你的业务。
+ 对进阶都来说
> 善于比较服务/技术之间的差异性,用最好的方式实现你的业务。
================================================
FILE: homework/lesson1/shaozhen.md
================================================
#JavaScript第一堂课学习总结
###徐老师通过讲解如何优化银行柜台工作流程,抛砖引玉类比出JavaScript代码的执行流程,深入浅出的介绍了JavaScript的总体面貌,令人印象深刻。
###随后老师使用同样方式通过介绍婴儿和小学生的生活环境来类比出浏览器环境和node.js环境对JavaScript来说,有什么不同和相同点。
###在浏览器和node.js中,它们都含有内置库可供JavaScript进行调用,虽然它们有部分是相同的,但是也有部分是不同的。因此同一段代码,未必能同时在浏览器和node.js环境中正常运行。而且他们都有很多第三方库来扩充它们的功能,第三方库有很多优秀功能,可以减少开发者大量时间和精力。它们之间还有一个共同点就是都具有V8引擎,这是JavaScript代码能够运行的关键,由对JavaScript代码进行解释执行,效率非常高,谷歌浏览器的优秀表现离不开V8引擎的加持。
###JavaScript是一个开发效率很高的语言,这归功于它是一门解释性语言,它的一条语句可以在执行的时候再翻译。但是,这也导致了它运行效率低下。
###JavaScript是一个应用广泛的语言,官方对它的更新也很频繁,可谓相关知识浩如烟海,无边无际,所以我们要找到学习的要点,深入研究。我们要利用JavaScript丰富的内置库和第三方库,用编程方式调用服务来完成相关需求,而且还要对重要的服务有足够多的了解和优劣的分析能力,善于比较服务和技术之间的差异性,使其能更好的服务业务,记住贪多嚼不烂。
================================================
FILE: homework/lesson1/shenzhili.md
================================================
# 第一节课的总结
## 1. 类比代码执行流程
老师课上讲了一个非常棒的类比:银行开户流程与JS代码运行环境。直播开始先讲银行开户流程,先是一头雾水地听了一段,后是恍然大悟。当徐高阳老师
将银行开户流程和JS运行环境的框架对应的时候,真的惊艳了:原来是这样,很好理解!
我从中学到了几点:
1. **类比这个工具的强大**,超出想象。(亲身感受才明白它的威力,仅仅从文字理解是不够的)
2. **优化流程**。 很多事情可以用效率低的方法完成,但做一个有心人去优化办事的流程,能达到事半功倍的效果。
1. **定义流程**。 定义流程是我课上才接触的概念,但我能想象它的强大:将流程定义清楚,不模棱两可,可以减少思考时的散乱,有助于提高思考质量(还有与人交流的效率)。
2. **总结概括能力可以训练**。 见识到了高手的总结概括能力,对比自己,发现有一个地方很关键:定义流程。
没有准确地定义流程,没有准确地把握事情先后关系和包含与被包含关系是影响叙述能力提升的障碍。
## 2. 运行环境
JS的运行环境有两类:浏览器运行环境和nodejs运行环境。两类运行环境都有V8引擎和各自的内置库。
需要注意的是,在进行JS代码编写的时候,要明确自己写的程序是运行在哪个环境下的。由于浏览器和nodejs的内置服务是不一样的,如果你的JS代码调用了浏览器的内置服务,却在nodejs的环境下运行,那结果可想而知。
## 3. V8引擎
V8引擎是JS运行环境的核心,V8引擎的功能是对代码进行预处理和执行,相当于编译器+执行器。初学者甚至初级中级工程师都不需要知道具体原理,把它当成黑盒就好了。
## 4. 编译器/解释(执行)器
编译器:将代码翻译成机器语言
解释(执行)器:直接对代码进行excute
## 5. 内置库
内置库:运行环境提供的一组服务,更好的实现一些功能。**不用重复造轮子了,直接拿来用就好。能省许多力气。**
## 6. 第三方库
第三方库封装好了代码,并提供了接口。第三方库收到数据后将处理结果反馈回来,能帮助实现更强大的功能。
## 7. 学习JS的方向
作为刚进入编程世界的小白,应该把注意力放在如何掌握编程语言这块,而且要深入学习,吃透概念。
================================================
FILE: homework/lesson1/sophieQi.md
================================================
第一次课程作业
老师在可用用类比的方式,用银行的办卡的服务流程推导出了代码的执行流程,用已知解释未知。
从程序的执行方式上分为编译器和解释(执行)器。
- 编译型是先编译后执行,需要一个专门的编译过程,通过编译器翻译成及其语言,运行效率高,缺点是开发效率低。
- 解释性是一条语句执行的时候才翻译,开发效率高,缺点时运行效率低。
在网上看了一个例子,对于采购日常用品来说,需要什么买什么,一次买一个内容,类似于编译器,是高需求,但需要不断的去响应新出现的需求。如果一次性列一个购物清单,把需要的内容一次性买回来,类似解释器,打包购买一次性齐活。

Javascript是解释型语言,有2种运行环境,分别为Node运行环境(后端使用)和浏览器运行环境(前端使用)。2者都包含内置库和第三方置库。


- 内置库:JS内置对象是2种运行环境的共同内置库。运行环境提供的一组服务内置库是 JS 内置的一些库,可以直接拿来调用。
- 第三方库:不同于内置库,需要require才能从外部调用。
V8引擎:用来执行代码,代码在V8中执行。解释器在V8引擎中。
## 学习JS的方向
- 掌握编程语言——用编程方式调用服务来完成你的需求
- 了解和掌握重要的服务能力——使其能服务你的业务
- 善于比较服务/技术之间的差异性,用最好的方式实现你的业务。
================================================
FILE: homework/lesson1/sunxl.md
================================================
## 小白学JavaScript
## 共建小白用的JavaScript技术文档
1. 用去银行开户的流程来类比代码的执行流程
2. 运行环境有nodejs和chrome浏览器,V8引擎暂时不用理他。
3. 编译器/解释器 chrome浏览器就可以编译,JavaScript是基础语言,应用很广,基于它设计出的语言都有100多种,了解它对学习其他语言很有帮助。
4. 内置库需要初学者花时间精力学习的,第三方库也很重要,初步了解
5. 学习js,在不同的阶段,都有不同的提高方式,所以说这是一个可以不断提升的技能,徐老师总结的三个阶段的不同突破方法,也可以用到其他语言学习上。
================================================
FILE: homework/lesson1/tangjianfeng.md
================================================
##1、用开户流程来类比JS运行环境框架
用银行的开户流程来类比Js运行环境框架,JS代码类似对银行有服务需求的客户,以v8引擎对应业务核心(即预处理和执行),用内置服务对应内置库,用第三方服务对应第三方库。同时了解到运行环境包含浏览器运行环境和Nodejs运行环境,这两种运行环境分别对应前端和后端,分别在浏览器上或Node上运行,他们主要的共同点在于JS内置对象,两者有通用的命令,但各自主要运用的内置库和第三方库大多不同,某些命令如alert在浏览器环境中能跳出警告窗口,而在Node上却是运行错误,因此学习Js要分清在哪个环境中用,才能有的放矢。
##2、主要学习的方向
主要学习的方向应该是熟悉代码的写作和了解内置库和第三方库,按照我上课的理解就是好好了解内置库和第三方库的作用,按照项目的实际来通过代码调用这些库中的资源,以达到用合适的库来做相应的事情,打个比方就是要解直角三角形三边长的问题最好用勾股定理,而不是用微积分。
##3、运行环境
运行环境类似于一个婴儿或者小学生的生存生活的环境,由供他生存的生活的各种具体的环境来对他做各种服务
运行环境主要有浏览器环境和Nodejs环境,前端开发一般用浏览器运行环境,后端开发一般在Nodejs环境中用
运行环境中有内置库和v8引擎。
##4、V8引擎
对代码预处理和执行
##5、内置库
是运行环境提供给我们的一组服务。
内置库中有网络库,日志库,js内置对象等库。浏览器中包含很多内置库,例如js内置对象,WebAPI,WebGL,HTTP,WebRTC,canvas等
Nodejs的的内置库中有JS内置对象,Node API。
##6、第三方库
第三方的库是由各种个人或公司编写出来方便我们实现更好更优质的服务的工具。
浏览器运行环境的第三方库主要有jQuery,Vue,AngularJS,React等.
NodeJS的第三方库主要有:Express,Koa,Webpack,Promise等
##7、编译器/解释(执行)器
编译器的几个主要作用:1、分析词法;2、分析语法;3、分析语义;4、优化代码。
解释(执行)器的主要功能是:1、解释代码;2、执行代码。
代码输入编译器,通过编译器分析词法、语法、语义及优化代码后,输出编译好的代码送入执行器,让执行器解释代码和执行代码,从而输出结果
JS是一种解释型语言,直接将代码输入编译器/解释器,它就能边进行分析词法、语法、语义,优化代码,解释代码,执行代码,不会有一个明显的编译过程,边编译边执行。
和编译型语言的区别是开发效率高,但运行效率低,因为它是边翻译边执行的。
================================================
FILE: homework/lesson1/taobao.md
================================================
【第一次作业】写一篇总结
运用下面这些关键词,把你知道的写出来。
1. 类比代码执行流程
2. 运行环境
3. V8引擎
4. 编译器/解释(执行)器
5. 内置库
6. 第三方库
7. 学习JS的方向
提交方式:
1. 请向getting-started-with-javascript项目发起pull request。
https://github.com/xugy0926/getting-started-with-javascript
2. 文档格式,markdown。
3. 提交homework/lesson1目录下。
---
1. 类比代码执行流程
JS 代码流程,类比,银行开户的流程,内置服务,核心服务,第三方服务,不同的运行环境以应对不同的使用人群。
vip 和 普通用户, javascript 和 nd.js
2. 运行环境
可以运行代码的地方就是运行环境,例如浏览器或者编译器
3. V8引擎
谷歌开发应用Chrome 的一种引擎,在运行js 前转换成机器码以次提升效率
4. 编译器/解释(执行)器
编译器,将手写字符串或字节转换成机器码,再进行运算
解释器,直接执行
5. 内置库
语言本身开发所附带的库,以没满足基本使用
6. 第三方库
由第三方提供并支持的开源或闭源,免费或收费的库,以更好的服务
7. 学习JS的方向
“善于⽐比较服务/技术之间的差异性,⽤用最好的⽅方式实现你的业务。”
================================================
FILE: homework/lesson1/tuyilang.md
================================================
### JavaScript编程入门第一节课总结:学习JavaScript的最少必要知识
老师先后通过两个类比向我们展示了学习JavaScript的最少必要知识。
##### 第一个类比
用银行开户流程的优化过程类比出代码的执行流程,同时具体而形象的展示了编译型语言和解释性语言的区别。在这两种流程(银行开户和代码执行)中,真正重要的是(运行)环境。
JS的运行环境包含了内置库和V8引擎。当然,在这个运行环境之外,我们还需要第三方库(第三方服务)的支持。
而**在这个运行环境中更重要的**(对于新手,初级乃至中级学习者而言)**是其中的内置库**,而不是V8引擎(负责代码最终的执行)。
但是V8引擎恰好体现出了编译型语言和解释性语言的区别,编译型语言需要一个专门的编译器,经过编译器编译之后再送去执行,而解释性语言(JavaScript)的执行过程是边解释边执行,靠的就是V8引擎这个解释(执行)器。
##### 第二个类比
用婴儿和小学生的生活环境的区别类比出浏览器和Nodejs的运行环境的区别。它们之间最大的区别也是使用的内置库不相同,还有一部分是用到的第三方库不同。
##### 总结
通过这两个类比,可以总结出学习JavaScript的**最少必要知识**就是:
> - **运行环境中的内置库**
> - **第三方库**
而这两者(S的内置服务和第三方服务)也决定了我们学习JavaScript的正确方向:
> 1. 初学:**掌握编程语言**,用编程方式调用服务来完成你的需求。
> 2. 提高:**了解和掌握重要的服务能力**,使其能服务你的业务。
> 3. 进阶:善于比较服务/技术之间的差异性,**用最好的方式实现你的业务**。
================================================
FILE: homework/lesson1/wangmeiling.md
================================================
【第一次作业】写一篇总结
运用下面这些关键词,把你知道的写出来。
1. 类比代码执行流程
银行开户流程,由客户和桂圆的简单分工,到银行方面有了内置的服务,比如打印身份证;到有了第三方,比如派出所。
通过银行开户流程的逐步优化到全面介绍代码的整个框架。我体会到编程思维是不是可以应用于日常工作的优化?
2. 运行环境
婴儿面临的世界和10岁小孩的世界是不同的,他们面对的世界就是环境;
而当我做在办公室里工作时,办公室的空间、办公室里的同事、空气、光线就是我工作的运行环境。
JS的运行环境是一个可以执行代码的黑盒。
3. V8引擎
V8引擎是属于运行环境中的一个小小盒子,它是执行代码的。
4. 编译器/解释(执行)器
对输入的代码进行解释、翻译,就像豆浆机一样把豆子打碎最后输出豆浆。
5. 内置库
可以直接调用的工具,就像修车行的工具箱里的工具。
6. 第三方库
公司、个人、开源、收费等提供的库(工具)
7. 学习JS的方向
我想学会搭建一个网页APP,用来记录每本书的阅读时间。
================================================
FILE: homework/lesson1/wangshasha.md
================================================
# lesson1 homework 王沙沙
标签(空格分隔): javascript
2017.8.13
##对编程的感性认知
就像去办银行卡,基本服务和增值服务分窗口,每个窗口执行特定功能,但都在银行里面完成的,偶尔特殊功能银行也需要和外面的组织合作;代码也是一样,在一个平台上可以进行多种服务的调度,你要哪种用代码调过来就好了(就像在银行/营业厅,你需要什么跑到对应窗口就好),有时候有些功能没有,就需要用到外面的功能集合(库)——小白的理解,不造是否有误
##语言类型
javascript是解释型语言,就是你把代码拼好了塞进去让它耍,它自己在哪折腾就会有点慢;C,C++是编译型语言,大概是它做点事要向你反馈一下,进度稍微慢一点,其他好处我还不知道
##编程环境
js可以用在很多地方,根据做出来的效果能不能直接呈现在大家电脑上,大概分两类:看得到的和一般人看不到的能呈现的是前端,不能的是后端。就像每个人在自己不同阶段所处的环境不同,js编程也需要不同的运行环境;前端的开发环境是chrome,后端是nodejs
##学js学的是什么
js编程是干什么:会用命令,调用内置库和第三方库
所以学习内容:小白起步时,会用命令;
进阶:熟悉这些库的用法;
提升:用最好的方式来实现需求
================================================
FILE: homework/lesson1/wangwei.md
================================================
1. 类比代码执行流程
> 比如去银行开一个户,先要填写申请单,对应的就是编写代码,把申请单交给银行工作人员审核,就是编译器和解释器 编译执行的过程, 然后是银行给出一个结果,或者有错误,重新修改代码,或者是通过,给出一个结果
2. 运行环境
>一个执行代码的黑盒,里面有 V8引擎 和 内置库
>JS 运行环境有两大类:
>>1. 浏览器 运行环境
>>2. Nodejs 运行环境
>两种运行环境包含各自的 V8引擎 和 内置服务
3. V8引擎
> 代码在V8引擎里面编译和执行代码,然后给出结果.
4. 编译器/解释(执行)器
>对高级语言来说,需要一个编译器,将高级语言编写的代码 编译成 中间文件,然后 这个中间文件又再解释(执行)器里 给 电脑,最终给出结果.
5. 内置库
>运行环境自带的内置对象,可以直接调用
6. 第三方库
> 第三方开发的对象,需要引入,才能调用
7. 学习JS的方向
> 从小白到入门,掌握编程语言
>入门到提高, 了解掌握重要服务,解决实际需求
>提高到进阶 ,能够比较各个技术,服务之间的差异,用最好的方式来实现
================================================
FILE: homework/lesson1/wangxuanding.md
================================================
第一次作业
=
1. 类比代码执行流程
---
代码执行流程,就像银行开卡,我们把要求填写的资料都填完(代码),银行职员(程序)检验我们的输入是否正确,正确则往下执行,有错误,则提示有错误,申请退回
2. 运行环境
--
运行环境就是银行职员以及银行对于我们所输入信息进行处理,且有标准化规定的东西。
3. V8引擎
---
V8引擎就是职员对我们所输入信息的监视以及处理的过程
4. 编译器/解释(执行)器
---
银行职员的读写能力
5. 内置库
---
银行内部已涵盖的一些服务
6. 第三方库
---
能客户提供服务的第三方,并不一定业务和银行没有重合的,也并不一定比银行好。
7. 学习JS的方向
---
没特在意老师说的,我还是按照自己的方式来。
1. 大脑是无法通过未知的东西去理解未知的东西的。国内大学里的编程课,一上来讲了大段大段的基础概念,让人弄的云里雾里,难道要我们死记硬背吗?我的方式是,通过大量的实例,让自己知道这一个命令干什么的,那个命令有什么用,为什么要这样子。第一阶段,复制黏贴,第二阶段,对着代码敲,第三阶段,对着代码敲,同时划出部分精力去理解。一共运行3次代码
2.这样下来,自己对于那些概念已经有了一个大致的认识了,而且并不是那些空洞的文字,而是直接把这个命令和会带来的后果联系起来了。之后,就像是拼图,把之前已知的块与块结合,去拼凑出更大的东西,期间会不断的试错,同时会加强自己对于语法的掌握。
3.拼图大块地方都拼好了,剩下一些小角落,就查缺补漏,由于通过大量实例,已经知道哪些命令常用,且有使用价值,而且大半已经掌握了,去弄懂剩下小部分。还剩一些不常用的,遇到了之后再去学。
================================================
FILE: homework/lesson1/wangyuliang.md
================================================
##【第一次作业】写一篇总结
###1. 类比代码执行流程
通过银行开户,输入开户人信息类比代码的输入,通过银行的处理类比编译器/解释器,然后输出结果。而JavaScript通过类比它是非常高效的,输入代码,通过内置库和编译器、执行器的处理就能实现效果。把麻烦都丢在内置库里的感觉。
###2. 运行环境
运行环境,我想的是上班和下班回家,面对的情况不一样,你应对方式也不一样,不能拿工作的状态和家人相处。运行环境不一样,使用的第三方库也不一样,错用内置库和第三方库会使代码显示不了。见人说人话,见鬼说鬼话。
###3. V8引擎
踩下油门(输入代码),引擎开始给油做功加大(V8引擎执行加快速度这个代码的),输出速度加快,编程就是踩下油门等待引擎加快速度
###4. 编译器/解释(执行)器
编译器/解释器是V8引擎的一部分,它们负责分析你输入的代码表达的什么意思,到底给油还是减少给油。
###5. 内置库
内置库就是系统自带软件,如去住宾馆,提供的房价包含服务基本保证你的需求,但你有些时候需要其他服务,这时候就会去第三方库寻找。
###6. 第三方库
###7. 学习JS的方向
>掌握编程语言,用编程方式调用服务来完成你的需求;了解和掌握重要的服务能力,使其能服务你的业务;善于比较服务/技术之间的差异,用最好的方式去实现你的业务。
放下傲慢虚心学习才是成为高手的方法, 带有目的性学习,学习这个编程语言是完成什么需求,把这个语言与实际需求相结合,掌握它们之间的差别,用最好的方式去帮自己达成目标。
================================================
FILE: homework/lesson1/wangyunfei.md
================================================
## 第一课作业
经过了连续几天的折腾,终于走到了交第一课总结作业的地步,感觉好不容易。下面我以一个小白的理解,来叙述一下第一课的感悟。
### 一、运用类比
课程一开始,老师并没有着急直接讲专业的编程知识,而是讲了一个银行开户的例子,从一张最简单的开户流程图开始,几经优化,勾勒出一幅效率更高的开户流程图。但是这绝对不是单纯的讲故事。
这一类比的方法,是为了形象的勾画出代码的一个运行流程图。客户最初提供的的表单就是一页代码。客户开卡,就是代码的输出结果。
这一页代码(开户申请单)经过内置库(内置服务),然后流转到编译器、解析器(银行的业务核心),经过编译器、解析器的执行,最终输出结果(客户开卡)。
真的很佩服老师的智谋,通过这么一个形象的类比,来阐述代码运行流程。这种类比确实非常有效。
今天我又看了一遍课程回放,对老师经常讲的一句话有了初步理解。这句话是:“编程最重要不是敲代码,而是思考。” 我的理解就是,如果不去优化银行的整个业务架构,仅仅是靠提高窗口人员的技术水平, 那么就是把窗口人员累死,恐怕银行的整体运营效率也提高不了多少,开户的人一多,银行系统就要崩溃。
反之,经过优化了银行的业务架构,也就是优化了环境框架,可以迅速提高运行效率,这个是本质的提高。
### 二、环境
提高环境,我就想起一个词,叫大环境。 老师通过类比讲故事的方法,是为了更好的阐释“编程语言的运行环境”。后来又举例婴儿、与小学生的生活环境,来类比程序的运行环境。简而言之,就是程序运行,到底需要多少组件类支撑他? 他才能生存下去,也就是运行下去。
银行的运行环境,包括很多。内置服务(第三方服务),预处理服务,核心执行服务,等。
通过类比,代码的运行环境,也是雷同。包括内置库(第三方库),编译器/解析器,等。
只不过,不同的代码,不同的编程语言,他们需要的内置服务(内置库),是不相同的。但是代码整个运行的流程大致相同。
### 三、V8引擎:
V8引擎,通俗的讲就是8缸的发动机,缸体呈V字型排列。 在编程体系里面也有这个词汇,我去百度去搜,大概意思是:V8将其编译成原生机器码(IA-32, x86-64, ARM, or MIPS CPUs),并且使用了如内联缓存(inline caching)等方法来提高性能。有了这些功能,JavaScript程序在V8引擎下的运行速度媲美二进制程序。
请恕我水平太低,连读三遍,愣是没读懂。不过既然是引擎,那他肯定就是核心部件,有了它,整个运行环境才能运转下去。相较于银行的运行环境,V8引擎指的银行的就是银行的业务核心。这个核心部件,包括编译器/解析器,靠他们来执行。
至于V8引擎他们的原理,暂且不懂,不过V8发动机虽然不知道怎么制造的,但是只要能把车子开好,也OK。
### 四、编译器/解释(执行)器:
编译器/解析(执行)器,这个到底是两个机器呢,还是一个机器呢?
在编译型语言中,比如c语言,他就是两个机器,先编译,后解析执行。 银行开户时,预处理人员搞好后,在交给核心审核人员,最后输出。 这两个人分开干活,运行效率高,但是开发效率低。
在解析性语言,比如JS语言中,他就是同一台机器,边解析,边执行。银行开户时,预处理与核心审核,两个活都是这一个人干,运行效率低,开发效率高。
### 五、内置库:
内置库,这个在银行的运行环境中,就是指的内置服务。为了能够提高核心人员的运行效率,需要把客户的单子,进行同一的编排,嵌入,复印、格式化等。
这个内置库,在语言运行环境中,就是给代码进行相关的包装、整形、打磨、切割、清洗、编码、统一格式、等,然后让代码能够高效率的通过V8引擎,快速输出。或者说是为了让V8引擎快速识别他,并处理他,执行他。
### 六、第三方库:
第三方库,这个说法是相对于内置库来的,因为内置库毕竟有限,所以需要有第三方库来支持。毕竟代码的格式千千万万,内置库也不可能全部搞定,需要第三方来援助。但是第三方库与内置库在功能上是一致的。如果有一天,第三方服务被银行收编了,呵呵,那么这个第三方库,也就成了内置库了。
### 七、如何学习编程
本来第7个话题是学习JS的方向,但是我把它改成如何学习编程了,因为我确实还没有找到学习JS的方向,不过我可以说说我的大致规划。
因为,我是完全不懂编程,甚至对于操作计算机来说,也不是很熟练。
学习语言编程,我觉得首先自己要固定好时间,是上午学?还是下午学?每天学多久? 因为我工作性质的原因,我给自己订的目标是每天不低于一个小时,周末不低于三个小时,且每天都要进行,就按着老师的授课顺序来。
根据我这几天的思考,我觉得我只能按着我自己的基础来制定学习进度。没有办法去同他人的进度保持一致,大家的水平相差太多。学编程这个东西,我感觉不比吃饭,嚼烂嚼不烂只管往下吞吞,编程一旦有一个环节没学会,后面的根本进行不下去。
鉴于我的基础,以及我毅力差的性格,我暂时不给自己订学习目标,不打算这个月,或者这个季度,达到某种水平。每天保证学习一个小时以上,哪怕连续几天都在演练同一个项目,那也没关系。
至于具体学习步骤,就是两个字:“试错”,不停的试错。该试的动作,一个都不能拉下,我始终觉得,学习不能走捷径。
有一句话叫做“每天进步一点点,坚持带来大改变。” 能碰到这么具有爱心的“幼儿园老师”,如果不珍惜,恐怕是这一辈子的遗憾。最好的学习方法是什么呢?答案就是“做”。
做,你就对了。
### 班级:JS编程幼儿园
### 学生:王云飞
### 日期:2017.08.12夜
================================================
FILE: homework/lesson1/wangzhongbin.md
================================================
第一节课的总结.md
---
周二听老师的课,第一次不是从字面,而是从普通人去银行开户的场景来了解整个js,对js的环境、执行逻辑有新的认知。
受益匪浅,类比是帮助理解的绝佳方法。
> ps: 这次是根据老师的建议,结合ppt,进行的第二次修改。
> 还是要注意听讲,不能自以为是……对于代码的理解出问题了。
## 类比代码执行流程
**老师的类比是通过优化银行的开户流程**
假如你去银行开户,流程是3个:
1. 填写申请单
2. 去柜台开户
3. 发卡
最简单的是你填写申请单,然后直接就能去柜台进行开户申请。

窗口的工作人员,会进行2个工作:
**1.检查用户填写的申请表对不对,包括格式和信息的准确性。**
>* 这里用户填写的申请单,就是你的代码:
每一个编程语言都要遵循相应的格式,即申请表的信息格式;
编程语言的内容,就是申请表上你填写的信息(包括格式)。**
**2.申请表填对了,银行才会对用户开户进行审批。**
上图中,银行窗口是一边检查一边执行,这样用户的申请表填写流程不会很麻烦,但银行的运行效率会很低。
这和解释性语言类似,
javascript作为解释性语言,就是一边编译一边执行,每一条代码在要运行的时候才会被编译,开发效率会很高,但执行效率会很低。
之后,老师对流程进行了4次优化,分别定义了银行的各种服务,包括:内置服务(打印身份证、存储款)、运行器(先预处理、确认申请表、再执行),以及第三方服务(充值话费或缴纳贷款?)。
从而定义了开户环境,这里,银行的开户环境就是代码的运行环境。
同时,针对不同的客户(普通客户/VIP金卡),银行会开辟出不同的工作环境,比如普通柜台,和vip柜台。
在不同的柜台窗口,银行的提供的服务,不都是一样的,这就类似javascript的2个运行环境,一个是浏览器,一个是nodejs。
在每个柜台窗口中,都会有一些自带的服务,比如(打印身份证、存储款)之类的,即是内置库。
## 运行环境
运行环境,是代码的执行环境,就是之前提到的银行的工作环境。你的申请,需要到银行的窗口才能被执行。
假如javascript是一条鱼,运行环境就是水。
但javascript是淡水和咸水都能活的鱼。
在电脑里面,js能执行的地方,一是浏览器,一是nodejs,在这两个不同的地方,js可以做出不同的功能。
## V8引擎
> V8是Google开发的JavaScript脚本引擎。
V8引擎编译和执行JavaScript源代码。
速度是V8追求的主要设计目标之一,它把JavaScript代码直接编译成机器码运行,比起传统的“中间代码+解释器”的引擎,优势不言而喻。
V8引擎是提升javascript运行速度的引擎
> 是javascript的发动机。
## 编译器/解释(执行)器
每一个编程语言在运行环境执行时,是先通过编译器、执行器来变成机器理解的语言,再让电脑执行。
javascript是解释性语言,即一边编译,一遍执行,它的运行环境是编译器/执行器合二为一的,这样它的开发效率很高。
不过因为是边编译边执行,运行效率就低。
而编译型语言则是把编译器和执行器分开,需要先把编译型语言分析优化,生成一个编译过的机器语言,再把它进行执行。
编译和执行是分开的,这样它的开发效率会低,但运行速度很高。
## 内置库
内置库是环境里面自带的服务。
javascript运行环境,是浏览器和nodejs,已经带有的各种服务,不需要再安装了,比如js的内置对象啊,网络库之类的,只要有浏览器和nodejs,就会有这些服务。
## 第三方服务
第三方服务,是除了运行环境中自带的服务之外,又被很多人/公司添加的服务。
比如,js要在水里游,这个环境里面的水啊、氧气啊之类,就是自带的服务,即内置库。
第三方服务就是被人/公司添加出来的,原生态的水和海里面是没有的,比如为了让鱼更好更快,有人投放了不同的饲料。
**复制了huangjiashu童鞋的话**
>第三方库一般都是指同种语言开发的拓展功能,以满足多样化的需求。当然不排除会用其他语言开发第三方库供JS语言编写的代码来使用。比如:用C语言写一个高级算法(因为C语言效率更高),然后开发接口给JS用。那么这个接口比如满足JS语言对C语言调用规范。即:两种不同语言之间的调用,要满足一定的规范。这种规范一般情况只能是这两种语言相互认可。。python和C之间的掉拥又会有他们自己的规范。在绝大多数情况下,JS不太会用到其他语言的开放库。在学习过程中只聚焦在JS的第三方库即可!
## 学习js的方向

* 掌握编程语言,用编程方式调用服务来完成你的需求。
* 了解和掌握重要的服务能力,使其能服务你的业务。
* 善于比较服务/技术之间的差异性,用最好的方式实现你的业务。
这是老师的语言。
对于小白的我来说,
最好的方法还是:
1. 紧跟老师的步伐,先把老师讲的吃透,明白。
2. 掌握编程的思维和方法,如学习读代码,理解编程的思维和语言逻辑。
3. 精进,掌握具体的代码编写方法。
我理解一个东西,会先从大的概况来统筹理解它,然后再模仿,再抄袭,各个击破,错误的话,知道是哪一个部位出错了。
目标:掌握自学javascript的基本知识。
更大的目标:用windows,掌握前端和后端技术,能够独立开发一些小程序,或者微信端页面,是我的基本目标。
附属目标:在学校的工程中,我也积累了很多windows学js的坑,希望能够整理出一套系列的文章。
================================================
FILE: homework/lesson1/wenliuxin.md
================================================
### 1. 类比代码执行流程:
a) 银行开户程序有用户,内置服务(打印、照相等),业务办理(核对申请表基本格式、审查申请内容是否符合标准)
b) 编程中,用户就是代码,内置服务就是编译器,业务就是执行器。
c) 代码执行流程类比银行开户:写代码(用户),代码在编译器编译(使用内置服务),提交到执行器(业务办理),执行。
### 2. 运行环境
好似小孩子生活环境的不一样,js有html环境和node.js环境。两种不同环境生活的孩子有不同的生活习惯,所以,不同的运行环境需要不同的代码
### 3. V8引擎
黑盒子,输入一样东西,出来相应结果。一种类似烤箱一样的东西,你把面包弄好形状放进去,出来就是想要的烘培好了的面包。
### 4. 编译器/解释(执行)器
编译器是把人类写的代码翻译成机器能够明白的代码,然后把这些代码发送到解释(执行)器中,电脑执行代码内容。
### 5. 内置库
运行环境自带的功能,也就是好像银行里面请求打印、照相之类的服务
### 6. 第三方库
除了js本身带有的功能,其他公司开发可以兼容到js的软件or功能
### 7. 学习JS的方向
掌握编程语言;掌握服务器;比较不同服务器,哪种能够最简洁完成任务就选哪种
================================================
FILE: homework/lesson1/wenyunxin.md
================================================
## 1、类比代码执行流程
代码的执行流程就好比人根据一项说明说去完成某件事情,比如制作番茄炒鸡蛋,根据食谱的说明,调用准备的材料,按照某种顺序将材料进行加工,最后完成制作。
## 2、运行环境
未查找资料我的理解:程序的运行所依托的系统构造。比如软件运行在windows系统和运行在lunix系统下,其运行环境就不一样。
## 3、V8引擎
运行JavaScipt初始功能代码的系统功能。
## 4、编译器/解释(执行)器
这应该是指能用代码运行的shell,如cmd,IDE,编程语言安装的shell等等。
## 5、内置库
编程语言自带的可直接调用的使用某些功能的函数。如python里的max等函数。
## 6、第三方库
需要额外安装的,有第三方编写的能实现某些功能的pakage。
## 7、学习JS的方向
网页设计的HTML、CSS、JavaScript。其中JS是使网页实现动态交互和数据传输的语言。微信程序开发。
================================================
FILE: homework/lesson1/wufan.md
================================================
# 类比代码执行流程
## 1开户的流程
个人到大厅填写申请,递交给窗口工作人员,然后,由工作人员校验/审核资质(这个过程包括1检查信息格式2检查信息准确性;核对1征信2资格),最后要么通过发证,要么驳回重新填写。
优点是结构很简单,缺点是操作效率低下,一次过关率低。
银行开户流程是为了完成一项任务--开户。
#### 四次优化的开户流程
改进后第一版递交给窗口工作人员之间介入了大厅工作人员预处理,类似于氨压缩机预先冷气,然后再膨胀机再制冷,若不这么做,膨胀机入口温度高会导致膨胀机受损。同样预处理后就会方便下一步运行。预处理后,开户申请正确进入窗口环节,错误则驳回重新填写申请。正确申请后,再核对征信和资格,正确则发证,错误则驳回。
改进第二版,省去了递交回个人的步骤,直接由大厅工作人员确认好申请单交给窗口人员。在大厅工作人员环节保证信息正确包括格式和准确性。这就防止了用户的过多负担和反复修改的可能。
改进版三,减少了大厅工作的内容,直接在窗口内的环境完成,窗口内由审查申请和执行申请,组成预处理和执行部分。预处理完交给执行确认好的申请。然后返回到窗口传递到用户那里。
改进版四,窗口内的环境增设了很多内置服务,方便快捷更有针对性服务,因为有了各种模板所以非常快捷便于用户操作。
定义开户流程,用户,银行/开户环境/内置服务、预处理、执行、窗口。
## 2运行环境
运行环境(浏览器、node)就是你要实现你需求必须去什么样的地方,这个地方能够满足你的需求,这就叫运行环境,比如你要洗澡要么去澡堂,要么去自己家里,要么去有干净水源的地方,这个地方就是你实现洗澡目的的环境。
为了实现你的一个业务或者需求,必须从某些内置服务或者第三方库的环境中调用相应的数据,这个环境就是运行环境。
开户环境就是一个办业务的环境,它能提供内置服务,预处理和执行业务的一些列流程。
开户环境:为了完成所需的银行服务必须去银行相关的地方来办理,这个银行就是开户环境。
多样化的业务环境包括普通用户或者VIP,类似于此,js的代码分浏览器业务和nodejs业务环境,代码在不同环境中的语法也是不一样的,编写的方法也不一样。
浏览器中的内置库,就是可以供代码调用的一切函数和第三方库如图所示
node的运行内置库与js只有js内置对象一样,其他的包括第三方库都不一样,所以这两者不能完全兼容,能在js环境跑的,不一定能在node上跑,这也是为什么js可以作为开发前端和后端的工具。
类似于不同的生活环境,js和node的不同环境属性,决定了了他们不能完全兼容,有一部分是可以跑的
业务架构,银行,用户,第三方服务。第三方服务类似于去公安局啊,单位开一些证明材料。
类似于业务架构,JS运行环境框架中,包含了浏览器运行环境,Nodejs运行环境对应的是普通用户的开户环境和VIP用户的开户环境。
输入代码是为了获得想要的结果,这个结果需要一个环境,就好开户只能去银行这个环境一样。如同递交申请和预处理执行审核一样,代码输入也希望能有想要的输出结果。
详细的环境是如何工作的,有代码调用各种库的函数等,再输入用V8引擎去执行。
## 3v8引擎
v8引擎:在编译型或者解释型的过程中,加速执行效率的那么一个内置服务,在黑盒子里。
## 4编译型和解释器
编译型先编译好完整的代码,然后执行。特点是,开发写代码效率低,执行运行快。
解释性是边解释边执行,运行效率低下,但是开发效率高。
编译型就是编译完再一块执行,如果有错误就要逐步检查,开发效率低,但是运行效率高。解释型边解释,边执行,开发效率高,运行相对来说低。
编译的进化之路,由开始的机器语言,到低级指令语言,到后来的间接调用低级语言的高级语言文件,一步步使得编程语言符合我们的自然语言逻辑。
通过阅读优秀代码库,来优化你的程序,更加高效的实现你的目的。
通过研究内置库和第三方库比如freecodecamp等github上排名靠前的js开发库来学习服务与技术之间的差异性,写出合适环境下的代码用于调用出最利于实现你业务的一些库
编程语言学的就是写出优雅的代码调用那些内置库,第三方库。
需要边编译,边执行的机器。
## 5内置库
内置服务:开户时银行内部提供的一组服务。开发环境中固有的一系列服务,比如澡堂有卖拖鞋毛巾等,提供橱柜保管财物的服务。
## 6第三方库
还是澡堂,它没有吃饭的服务,你需要去饭店吃饭,这个饭店就是第三方库,它可能就在澡堂附近。因为众多,所以称库。
第三方服务:银行不具备出具提供的证明等服务,需要由个人实现准备后,才能完成银行内部业务的服务。
核心业务:银行会有哪些直接提供的服务,供你能选择的业务,这些服务和业务就是核心业务。
预处理:在提供服务的时候,为了提高效率减少出错率,采取的有效措施。
执行:就是通过或者驳回客户的各种服务的申请。
第三方库一般都是指同种语言开发的拓展功能,以满足多样化的需求。不排除会用其他语言开发第三方库供JS语言编写的代码来使用。比如:用C语言写一个搞计算法(因为c语言运行效率更高),然后开发接口给js用。那么这个接口比如满足js语言对c语言调用规范。即:两种不同语言之间的调用,比如满足一定的规范,这种规范一般情况只能是这两种语言相互认可。python和c之间的调用会有他们之间的规范。在绝大多数情况下,js不太会用到其他语言的开发库。在学习过程中只聚焦在js的第三方库即可。
## 学习js的方向
分为浏览器的前端开发,和nodejs或者node,后端开发。方向不一样环境也不一样。
================================================
FILE: homework/lesson1/wukuipin.md
================================================
1. 类比代码执行流程
> 当你去银行开户,将开户申请表提交到银行窗口,银行接收申请,在后台处理,通过审查和执行申请,然后返回结果。如果信息审核通过,银行就通过申请,这样就开好银行账户了。
2. 运行环境
> 运行环境分为(前端)浏览器的运行环境和(后端)Nodejs的运行环境。
> 他们的内置库都包含有JS内置对象,都有第三方库。运行环境就相当于一个人的生活环境,他生存下去的物质需求以及生活和工作上的各种社会关系构成的生活环境。这相当于JS运行的库,JS代码要执行就的有运行环境,否则代码就失去意义。
3. V8引擎
> 就是对代码进行预处理和执行的黑盒子。
4. 编译器/解释(执行)器
> * 编译器:需要一个专门的编译过程,通过编译器翻译成机器语言。特点:运行效率高。缺点:开发效率低。
> * 解释性:一条语句执行的时候才翻译。特点:开发效率高。缺点:运行效率低。
5. 内置库
>运行核心,就是在运行环境里面有哪些东西我们可以去使用。如:网络库、日志库、JS内置对象等。
6. 第三方库
> 围绕浏览器运行环境和Nodejs运行环境有很多第三方库,以满足javascript代码的调用。
7. 学习JS的方向
> ***掌握编程语言***,用编程方式调用服务来完成你的需求。
第一步:学会如何调用内置库和第三方库;
> ***了解和掌握重要的服务能力***,使其能服务你的业务。
第二步,深入了解内置库和第三方库;
> 善于比较服务/技术之间的差异性,***用最好的方式实现你的业务***。
================================================
FILE: homework/lesson1/xianengqi.md
================================================
#
+要熟练掌握`编程语言`
##
+要熟练运用`内置库`
###
+运用编程语言灵活运用`第三方库`
================================================
FILE: homework/lesson1/xiaochaoge.md
================================================
# JavaScript 的基本概念
## **一、理解篇**
### **1.1 类比代码执行流程**
银行开户的流程演进就是程序语言一步一步演进的历史:
1. 最早开始的开户流程,主要依赖于用户自身和银行的交互,用户通过发出开户申请,银行负责审查和执行,最终确定是否开户。
> 这和最早的代码执行过程很像:代码向客户端请求一个命令,客户端核对无误后,才能执行。写代码的程序员花大量时间,千方百计的查找到错误,修正错误,才能进行下一步。更有可能的是,好容易通过了开户的资格审查,但是得到的并非正确的结果,就像开户的时候,张三的户挂着李四的名字,这个可是大大的不好了。修正这个难题本身,可能回比能正确的执行更重要。
2. 从用户出发,不仅仅是商业史上的重大演进,更是程序员的福音。通过大厅工作人员的检查校对,柜台办理人员的执行申请,是在编程里把编译器和执行器分开,编译的同时预处理,检查是否代码格式存在问题,执行时,关注内部的逻辑关系,把预处理和执行分开,极大的提高了语言的处理效率。
> 例如编辑性语言的 C 语言,通过编辑器的预处理和执行器的运行,提高了代码的处理效率。
3. 虽然按照两个模式提交代码能提高代码的运行效率,但是预处理和处理器能执行后自动执行,而不是让用户跑完大厅后继续在柜台前排队更能提高效率。
> 例如解释性语言的 JavaScript 做到了一边编辑同时执行,虽然从银行的例子来看,是提高了效率,但是不代表 JavaScript 比起 C 语言百利而无一害。
#### JavaScript 与 C 语言的区别
- C 语言运行起来不需要预处理,会体现为 **运行效率高,开发效率低** ;
- JavaScript 语言运行起来一边处理一遍运行,更符合人类语言,更容易读懂,更容易移植到其他平台,体现为 **开发效率高,执行效率低** 。
### **1.2 运行环境**
运行环境和代码的关系,说简单点,就是购物平台和电商的关系。以淘宝为例,淘宝是电商的平台,电商只有有货物,同时把货物上架到淘宝才能出售,确保货物能出售的买家卖家交流服务、能编辑处理货物的物理服务、以及处理钱款关系的支付服务,构成了交易体系的运行环境。
那么代码就相当于是货物,货物上架到运行环境后,要调用环境中服务来执行这段代码,包括这种货物能否找到以及调用合适的内置服务和第三方服务,是否符合可代码的正确格式,以及最终从输入到执行获得输出的结果。
- **总结一下,运行环境就是能满足代码处理和执行的环境,环境本身由内置服务和第三方的服务支持,以及预处理和执行器构成。**
当然,购物平台不止淘宝一家,所以执行代码的工具在不同环境会有不同的服务和体验,就像在亚马逊开店和在淘宝、京东开店一样,肯定有相似之处,但是也有不一样的服务 —— 关于买卖家的沟通,可能淘宝是我看到最好的,没有之一。
那么同样一串 js 代码,由于不同的需求,被送到浏览器的环境和 Node.js 环境,支持第三方库、内置库的不同,会导致编译的结果会有所不同。
### **1.3 V8 引擎**
V8 引擎,对初学者的我而言,并非一个很熟悉的概念。
简单检索了一下, V8 指的是效率高的 8 缸发动机, V8 引擎可能也是为了说明这个引擎快吧。 V8 引擎是由于 Google 为了提高编码的效率利用 C ++ 编写的一套提高效率的工具,缺失不产生中间代码、直接编译和执行确实提高了效率,但是提高效率更深层次的内容,我并没有看懂,下面是我检索到的文章,我觉得如果你想深入了解V8 引擎,或者以后我想深入了解它,可以借助这篇文章:
http://blog.csdn.net/horkychen/article/details/7761199
但是,我可以理解 V8 引擎像游戏机,当我按下游戏机的按键时,游戏机内部发生了什么我并不知晓,但是我还能很好的控制遥控游戏中的角色,不是吗?目前,我先要看到结果,学会输入和结果之间的关系已经足够了。
- **总结一下,V8 引擎我可以认为它是个神奇的黑匣子,我不知道黑匣子里面是什么,但是我知道它能同时预处理和执行代码,是运行环境最为核心的组成部分。**
### **1.4 编译器、解析(执行)器**
就我的理解而言,编译器、解析(执行)器其实就是黑匣子 V8 引擎干的事。把它们分开的依据,可能是因为他们的目的不同吧:
- 编译器:分析词法、分析语法、分析语义、优化代码
- 解析(执行)器:解释代码、执行代码
**对于编译器、解析(执行)器,前者负责看代码是否有错误,进行预处理,后者加工。把 V8 引擎看成一个黑匣子般的香肠的加工工具,输入的代码就是肉,输出的是结果是香肠 —— 那么编译器就是肉类的分拣、简单处理、剔除杂质,保证更容易被加工;解析(执行)器就是个干!**
### **1.5~1.6 内置库、第三方库**
理解库的关键在于 —— 为什么需要库?
库是为了能使得代码执行高效而可以被调用的一组程序。其中的一组程序和编译器、解析器一起直接被植入环境,被植入环境的程序叫内置库,不在环境内的叫第三方库。
当环境改变的时候,内置库和第三方库都会改变,就像一个婴儿和一个中年人所生活的环境不同,类似于浏览器的环境和 Node.js 环境的差异,那么它们所需的内置库和第三方库也就不同。
### **1.7 学习 JS 的方向**
工具只是实现方法,而想象力可以把我们带到任何地方。学习 JS 或许是想把想象中和真实构建连接的台阶吧。
学习 JS 之初,先能满足想法的需求,做出来,掌握语言,保证先能实现再说;其次,需要了解服务的类型,用更好的服务服务你的需求;最后能对比服务和技术的差异,用最好的方式实现你的服务。
或许以上是做一个好程序员的需求,但是对我而言,了解 JS 的发展,判断它以后还会怎么发展,以及 JS 的理论还能用在别的其他什么地方,以后未来人和计算机是怎么沟通的,或许是更吸引我深入与它对话的原因吧。
反正未来大部分人的判断是人工智能,那么,如果人类和计算器交流的是未来的趋势,为什么不先假定这个计算器领域使用最广泛的语言 —— JS 开始呢?
## **二、代码篇**
### **2.1 git 基础**
#### GitHub 新建项目指南
1. Fork项目/新建自己的项目
- New repository
2. 克隆项目到本地
- git clone url
3. 第一次改动
4. 查看改动的文件
- git status
5. 改动本地提交
- git add -A
- git commit -m"改动内容"
6. 推送到远程仓库(远程服务器)
- git push origin master
#### Fork 项目更新
**命令模式:**
1. 确定同步的本地文件地址
- 终端 > cd 到自己 fork 后 git clone 的项目
2. 数据源
- git remote add upstream xxxx
- “xxxx”代表你需要与之保持同步的数据源,需要键入同步的git项目地址
3. 取上游数据
- git checkout master //切换至master分支下
- git fetch upstream //获取上游数据
4. 数据合并
- git merge upstream/master//进行主节点和上游节点数据的合并
5. 本地合并后文件上传至 github 服务器上
- git push origin master
#### 山穷水尽:丢弃所有本地改动和提交,从服务器获得新历史版本
git fetch origin
git reset --hard origin/master
### **2.2 还未熟悉掌握的指令**
#### rm 命令 删除文件或牡蛎
rm file_name
rm -rf file_name // 强制删除
================================================
FILE: homework/lesson1/xieyuhui.md
================================================
带你走进Java script
1. 当你去银行开户,你需要填写表格然后提交至窗口,静等银行工作人员校验、审核。通过之后你的开户任务就完成了。
http://t3.qpic.cn/mblogpic/6623754549bead7e26ac/460
2. Java script和银行开户是一样的流程,你需要把代码写入终端提交,解释器分析、解释、执行。通过后你就得到了你要的结果。
http://t3.qpic.cn/mblogpic/640a2eec3d0a15fae874/460
3. 当然银行开户还需要你的身份证复印件、相片,银行都配有这些内置服务。银行之所以能够审核你信息的真实性需要必不可少的第三方服务,
也就是必须有公安系统的支持。银行开户分普通开户和VIP开户,普通用户标配的内置服务、调用的第三方服务和VIP用户标配的内置服务、调
用的第三方服务会有所区别。
http://t3.qpic.cn/mblogpic/6abf7e2de0d11db1ac4e/460
4 JS也配也有标配的内置服务,和可以随时调用的第三方库。JS分为浏览器运行环境、nodejs运行环境,不同的运行环境所提供的内置服务和
第三方库是不一样的。
http://t3.qpic.cn/mblogpic/f2ead7db649e3baf4f9c/460
5. JS的运行环境:
http://t3.qpic.cn/mblogpic/868ff88839c94709c5e0/460
http://t3.qpic.cn/mblogpic/6604ded60b59ad706640/460
http://t3.qpic.cn/mblogpic/d6ab25e3dcaa5cedc0fa/460
6. 浏览器的运行环境包含的内置库、第三方库:
http://t3.qpic.cn/mblogpic/34f8789aa6ee3fe82650/460
7. node运行环境包含的内置库、第三方库:
http://t3.qpic.cn/mblogpic/d0f9ea51b80e027fb65a/460
8. v8引警就先省略了,反正我是不懂。
9. 编译器/解释器的差异?
• 编译型:需要⼀个专⻔的编译过程,通过编译器翻译成机器语⾔。你需要输入程序代码 -> 得到可执行代码要得到执行结果还得再去执行可执行代码,
从用户的角度看有[一个单独的编译步骤]和[一个单独的执行步骤]特点:运⾏效率⾼。缺点:开发效率低。
http://t3.qpic.cn/mblogpic/39ddd5d9e61879d020e2/460
• 解释性:⼀条语句执⾏的时候才翻译。你只需要输入程序代码 -> 得到执行结果,从用户的角度看一步到位。特点:开发效率⾼。缺点:运⾏效率低。
http://t3.qpic.cn/mblogpic/027f3f9f2b0bd625fd64/460
10. 下图是学习JS的方向:
http://t3.qpic.cn/mblogpic/237d52b51d29cd39d1b8/460
http://t3.qpic.cn/mblogpic/16dcfb93b2bfaf59c8f8/460
11. 无论你是小白还是已经在工作,你都应该明白该怎么进阶:
http://t3.qpic.cn/mblogpic/814e89b2c5bc04d4cffc/460
================================================
FILE: homework/lesson1/xiongliyu.md
================================================
-----
# 第一次作业
## 1.类比代码执行流程
老师用银行开户的流程来类比代码执行流程,首先把开户的流程大致的分为 了三步,从这三个步骤触发,逐一思考如何改进流程,发现了4各个需求:
1. 银行工作压力大 。
2. 用户压力太大,流程过多(其实到到改进版二我觉得基本的问题就没有了,接下来的改进,就是让这个流程更加优质)。
3. 提出一个疑问,能不能让用户只面对一个对象。
4. 用户在进入流程填写申请单之前用户还需要哪些东西。通过不断地分析需求、优化流程,最终得出一个完美的“用户开户流程”。
> 我的感受:从学习的角度看:
> 1. 我们可以借鉴老师的思路,首先学会最基本的知识,然后去思考,去主动发现不足,带着思考和问题去主动学习。
> 2. 我们写的代码的执行过程就像上面的例子,今后的学习过程需要我们不断地去思考我们的代码,从而优化我们的代码。
> 3. 写代码的时候,是不是可以先梳理清楚我的思路?我要解决的问题是什么?还有没有别的更好的办法,然后再去把我的思路用代码书写出来?是这样吗?如果是这样的话,那么养成这种习惯就很重要。
## 2.运行环境
浏览器的运行环境就是支持浏览器正常运行的各种资源(库),如果少了某一种资源(库),就会出问题。JS和node的运行环境就是不一样的,我们得区分开来。得清楚我在什么运行环境,我需要掉什么库,来解决我的问题。
## 3.V8引擎
老师把他比如城一个 黑盒,不用去管的东西,不用去管代码是如何执行的。我发现一个现象:我们在学习JS的路上好像会很多的“V8引擎”,函数中有、数据类型转换中有、vue中有等等。我感觉每一个新的知识点都有,又好像,新手会不自觉地去思考它道德是如何实现的,那么是不是在我们的学习过程中,就应该清醒知道那些是V8,别去管它。是这样吗?
## 4.编译器/解释器
属于V8引擎类的东西。JS代码就是边翻译边解析边执行,也是不用管的。知道有这么个东西就可以了。
## 5.内置库
属于JS运行环境中最重要的部分,也是我们学习JS的重点,需要去聚焦、熟练的部分,它是服务于我们写代码的,只有掌握了才能去调用这些内置库,从而完成我们的代码。梦想大楼的地基啊。
## 6.第三方库
由第三方开源出来的库,也是学习需要聚焦的重点,学习初期听老师的话先把注意力在vue上。
## 7.学习JS的方向
谨记老师给初学者的建议:**掌握编程语言,用编程的方式调用服务来完成我的需求 **。掌握编程语言,犀牛书就是我们要去搞懂的,多练的编程语言。
================================================
FILE: homework/lesson1/xugang.md
================================================
# lesson1 学编程,为更好--xugang(徐钢)
## 更高、更快、更强
计算机、互联网处理信息、传递信息的效率很高、成本很低。如简单类比,处理信息对应生产,传递信息对应交易。一个行业生产、交易的效率高、成本低。这样的行业不火,很难。
但计算机、互联网再厉害,还是得靠人告诉他们做什么和怎么做,才能创造价值,服务于人。离开了人,就什么都不是。人既是起点,也是终点。
所谓编程,就是告诉计算机和互联网做什么以及怎么做,就是给计算机和互联网设计工作流程。计算机和互联网的高效率是否能够发挥出来、能够多大程度的发挥出来,取决为他们设计工作流程的人的水平。就好比屠龙刀拿在樵夫手里,只能多砍点柴;拿在张无忌手里,才能号令天下。学编程就是为了学会利用计算机、互联网这两个当今世界的倚天剑、屠龙刀,实现更高、更快、更强的目标。
## 编程就是做流程
徐老师在课上以银行业务流程为例,非常生动的为我们介绍了编程中最重要的思想,我总结为:
“以安全、稳定为前提、以高效为目标的流程意识。”
课上徐老师还通过对银行流程的4次优化,让我们理解了流程的重要性,以及流程改进的空间及方法。作为一个小白,对此的理解定然浅显。以后还通过学习和实际项目加深领悟。
##人人都是程序员
回味徐老师的讲解,我觉得学习编程不仅是学习编程,更是学习一种方法论。编程中的流程意识何尝不是做人、做事的道理?对安全、稳定、效率的权衡拿捏,不也是为人处世的主要议题吗?那些不就是人生事业中的流程意识吗?对于我们普通人,三分天注定,七分靠打拼,我们就是自己的程序员,事半功倍、人生几何,主要靠自己的编程水平啊。既然人人都是程序员,有什么理由不学习编程呢?
跟着徐老师从JS学起,人生幸事!
================================================
FILE: homework/lesson1/xugaoyang.md
================================================
【第一次作业】写一篇总结
运用下面这些关键词,把你知道的写出来。
1. 类比代码执行流程
2. 运行环境
3. V8引擎
4. 编译器/解释(执行)器
5. 内置库
6. 第三方库
7. 学习JS的方向
提交方式:
1. 请向getting-started-with-javascript项目发起pull request。
https://github.com/xugy0926/getting-started-with-javascript
2. 文档格式,markdown。
3. 提交homework/lesson1目录下。
================================================
FILE: homework/lesson1/xuli.md
================================================
# Lesson 1 上课心得-许丽
## 写在前面
当课程进行到了后1/2,我才来提交lesson 1的作业,其实还真是相当惭愧。
认真分析自己如此拖延的根源在于:
1. 自己的探索能力真心不够,卡在一个环节后,不进行各种方式去自我尝试。 然后就一拖再拖,每天充满内疚感。
2. 自己终究还是表现型选手,不好意思去请教自己觉得太low的问题,然后一个劲地瞎琢磨,学习效率极低!
3. 总是想着,每个人的注意力都那么宝贵,我真不好意思去打扰。其实在再次看了笑来老师关于“贵人”那一期专栏时,我就应该告诉自己,其实求助不等于乞讨。。。
其实都是自己内心想得太多再作祟。谢谢娟娟组队不嫌弃我。终于,我才真正意义上开始了自己的做作业之旅~,这种感觉真好~
## 关于lesson 1 知识点的理解
### 类比代码执行流程
第一遍听高阳老师通过`设计银行开户流程`的方式,从而类比代码执行的流程。就在内心表示非常诧异。
以前只是感慨笑来老师的几个类比特别经典,但是现在却是看到高阳老师将类比用得如火纯青的感觉。
当我再重听了几次回放之后,我自认为自己是理解了代码具体怎么执行的,当我想不清楚的时候,我就重新回顾下老师是怎样用银行开户流程一步步地优化出最后的架构来的,然后再将 js代码与用户做替换,将运行环境与开户环境做替换。似乎就慢慢完全理解了。
### 运行环境
一方面,老师用银行的普通用户开户环境与vip用户开户环境,分别类比为:浏览器运行环境与Nodejs运行环境;另一方面,老师又用婴儿生活环境与小学生生活环境进行同样的类比。
我是直接简单粗暴地理解为代码运行犹如很平常的每一个人做一件事都有其特定的环境一样正常。只是似乎Nodejs运行环境是更高一级的运行环境,而浏览器运行环境更低级一点点。
### V8引擎
V8引擎包含预处理与执行的模块,我根据老师ppt图片简单地理解为运行环境的一部分,类似银行窗口人员对开户申请单的审查申请与执行申请功能。
根据老师上课时说的话,我甚至又简单粗暴地理解成——对于我们这种初学者纯小白而言,可以暂时不用去管v8引擎到底是如何运作的,它对我而言暂时一点都不重要~
### 编译器/解释(执行)器
看了其他同学的作业,似乎我感觉我更应该理解老师的意思是让我们理解解释型(JavaScript)语言中的 编译器/解释器。 不知道我理解错了没有。
类比于银行开户流程设计中的 第一个最简版本的流程,其中的窗口工作人员既负责校验格式等初阶工作,又负责审核资质核对征信等高级工作的内容。
似乎可以理解为编译器/解释器做了所有的工作,包括:分析词法、分析语法、分析语义、优化代码、解释代码、执行代码等工作。 因为工作内容繁多,所以运行的效率偏低。
### 内置库
我依然是基于老师对银行开户的内置服务类比,理解得总是非常简单粗暴。内置库就是为用户的代码提供一些最基本的最常用的内部服务。这个库可以供不用的用户进行调用,类似于一项公共服务,可以节约社会资源。
### 第三方库
第三方库类似于对内置库,这项公共服务的补充服务,但是是由单独的第三方提供的,有针对性的一些也会经常用到的个性化服务的一种资源。
## 关于我自己学习JS的方向
直到今天(2017年8月31日),似乎我也不知道自己要学习的JS方向到底是什么,也许会向老师在第六节课内给出对女生的建议一样吧——做前端。
不过暂时倒是没有想过要做个女工程师。暂时的想法是从本职的财务工作,转销售。 希望学习了编程之后,能够提升自己的工作效率~
## 我还想说......
感谢高阳老师,特意给我建了一个“准妈妈帮帮团”,还给我一对一远程地指导~
感谢娟娟同学,组建了一个妈妈帮,让我终于迈出了第二步,进入学习状态,好像我终于不会再那么不好意思啦~
娟娟昨天微信上问我:讲真,你有没有想过放弃js课程?
我说: 还真不想放弃,这是我最想学成的一门课,虽然落下很多,坚持得有点累,但是,我依然会努力跟上,大不了我下次,下下次再接着上课!
是的,这就是我最想学会的一门课,不像英语,财报那些我多少有点儿基础,而这门课就是我零基础学的,我想,如果我能学成它,以后就不会有太多事儿能够难倒自己了~
我得加油!我知道, 只要我自己不放弃,我就永远有救! 再次谢谢老师和同学们!
================================================
FILE: homework/lesson1/xuluchun.md
================================================
这是我的主页:https://wangzhong2014.github.io/javascript/
本文是新生大学徐老师编程课的第二次作业。上课时,老师以小明为例子,把一个现实生活中的小明,推到成了虚拟世界中的小明。
for (i = 0; i > 3; i--){
console.log(i);
}
**这个循环应该被无限循环下去吧,因为永远也无法达到结束条件。这是我的猜想,结果,我在chrome里面实验的结果是:undefined。。。难道,是JS会检查死循环吗?**
另外,双游标方式,或者多游标方式,表明,一个循环里面,可以针对N组数据进行相应处理,如果使用&&,||等方式对多个游标进行联合判断,应该可以形成更加复杂的逻辑。当然,一切都是看需要。
现在感觉非常渴望能够面对实际的问题来写代码!
## 二、对数据交互过程的理解
前端(客户端)和后端(服务端),各自承担了不同的任务。前端主要满足了用户界面,交互等功能,主要的数据操纵,处理,一般在后端完成。
所以,也可以理解为前端请求服务,后端满足前端请求,提供服务的这样一个过程。
对于数据,前端也不是完全不做处理,前端也会将数据进行一定程度的处理,打包,转化成后端比较容易处理的格式,然后再交给后端进行处理的。
## 三、软件架构与运行环境
软件架构是一个系统的设计图。从这个角度理解,软件架构的产生应该是面对某一类问题,有一些比较通用的解决思路,有人将这种思路总结归纳后,做成一个通行的设计,然后提供给其他人用。那么这个时候,你可以理解这是一个软件架构。
Node.js,并不针对特定问题或者业务,只要符合他的标准,它都可以为程序提供一个可运行的环境,所以,肯定是运行环境,而不是架构。
## 四、数据类型的价值
不同的数据类型,决定了代码的执行效率。效率包括:存储效率,计算效率,传递效率。
选择适合的数据类型,来处理我们的数据,这是一个程序员努力的方向。如何能够提高代码的执行效率,这应该是一个程序员进步的方向。
从课程里,我们可以了解到,数组,对象,这些复合型的数据类型,计算机对其进行处理的步骤是比较繁琐的,会消耗比较多的资源。我们将一组属性封装起来,然后形成一个对象,或者将一组数据直接变成数组的这些封装操作,实际上是方便程序员来编程。对于计算机来说,一定是会降低执行效率的。
一个程序好不好,在都能完成业务需求的前提下,一个重要的衡量维度就是执行效率高不高。
还有一个需要注意的部分,定义就必须要使用。不管是变量,还是数组,或者是函数,都是一样!
如何使用不同的数据类型,这个在书中有详尽的说明。
总的来说,所有的类型都可以转化String类型,包括布尔型,null这些都可以。可以说,字符串是一个万能数据类型,将来变成应该是非常有用的。
其他类型相互之间的转换,只要能理解他们的值在这个类型中是否有意义,就比较容易可以推断了。
例如转化为布尔值,对于布尔值而言,只要有值,就应该为真,没有值的就是假。就容易理解了。
关于命名方面的理解,在刚才已经有描述,所以后面不再继续总结。
这两天的任务就是继续啃书,把基础拿下!
问题:
关于数据类型的操纵方式,有一些用".",有一些用"()",有的用"[]"。到底什么用点,什么时候用括号呢?这些用法背后的逻辑,或者规律是什么呢?
================================================
FILE: homework/lesson3/cuimiao.md
================================================
#小白cuimiao的第三节课作业总结
1.老师开课先讲解了一幅流程图,并用微信发消息为实例,讲解数据交互的案例。重点强调了time是服务器给出的,被篡改的可能性小。
2.nodejs是运行环境,是基于v8引擎的JavaScript运行时。运行时是一种面向对象编程语言的运行环境。nodejs就是js的运行环境。
一组代码结合nodejs运行环境,形成一个完整的运行环境。
而软件架构是指系统的设计图。
3.数据类型的价值,不同的数据类型,可以简化计算。比如,直接说小明是18岁,比说小明是1999年出生的,要少一步计算。
不同的数据类型决定了代码执行的效率,效率包括:存储效率,计算效率,传递效率。这体现在了内存的占用及消耗情况。
4.正确是说法:定义一个变量,并对其赋值。
5.定义了变量,就要使用它,否则它就毫无用处,就是垃圾数据。
6.命名的力量。
6.1让名字包含更多的信息。
6.2 要what 不是how。var inputData 不如 var employeeData
完整代表了变量的含义吗?判断的依据是,是否能推导出更多信息。
以问题为导向了吗?是否反映了问题而非解决方案。
7.实操
7.1表达式语句/赋值语句
var age = 18; 注意要有一个英文的分号
表达式语句和表达式是不一样的,表达式指的是 1 + 1;
7.2条件语句 if
if ( age >= 18 ) {
console.log( '已成年' );
}else{
console.log( '未成年' );
}
console.log( '\n' );
注释:gae>=18是表达式
7.3条件语句--switch 开关
break 是指处理完这个路径后,就要退出
布尔型只有ture 和false 没有其他情况
7.4 for循环
【编程里有三大结构:顺序,条件,循环】switch很少用
循环语句的三要素
1.循环开始的初始化变量 var i = 0 ;
2.循环条件 i < myLikeColorslist.length ;
3.计数器变量更新 i++;
for ( var i = 0; i < myLikeColorsList.length ; i++) {
console.log( myLikeColorslist[i] );
}
【注意: 分号“;”是代表一个空语句】
改进:绳子两头收,只需要轮询2次
for (var i = 0, j = myLikeColorsList.length - 1; i < myLikeColorsList.length / 2 ; i++, j--) {
console.log(myLikeColorsList[i]) ;
console.log(myLikeColorsList[j]);
}
【我的疑问】 myLikeColorsList.length / 2 这个是什么意思呢?????
7.5 循环语句 while
var i =0 ;
while ( i < myLikeColorsList.length) {
console.log(myLikeColorsList[i]) ;
i = i + 1; // i++
}
8 网页交互原理
浏览器与服务器的交互
8.1获取html文件 8.2 解析html文件 8.3 获取js/css文件 8.4 更新页面/执行js代码
【作业】参考新大登录流程图画出浏览器与服务器之间的流程图
【Q&A】
犀牛书,前七章最基础,是需要认真学习的。w3school 看到break之前。
前端,把后端的数据拿过来去刷新页面,展示网页,把数据更友好的展现给用户。
后端,是指处理数据,跟数据库有关系,后端就是提供数据的服务。
{} 后边有分号是定义一个对象。当是for循环或者if语句时,{}后面是没有分号的。
全桟,老师现在不太喜欢这个词。全桟是对一个工程师无比高的荣誉,不仅可以写前端还可以写服务端,而且还能设计api,做自动化测试,搭服务器,设计数据库,架构等等。只会前端和后端,不叫全桟。
================================================
FILE: homework/lesson3/dengxy0907.md
================================================
浏览器与服务器交互
===============

### 题外话
> 在此之前确实没有想过打开网页也有这么多步骤,第一次看到类似的流程是在搭建shadwosocks的时候。直到现在仍然是照葫芦画瓢,关于各种协议看的也不是太明白。
> 因为一些原因自己的生活发生了意外,课程也耽误了不少,甚至拉下的课程让我觉得畏惧了,不管了,今天开始推掉所有的事情。
================================================
FILE: homework/lesson3/fangqingyang.md
================================================
# Note 3
## 什么是重要的?
### 把《JavaScript权威指南》的基础部分补上很重要
### 流程图很重要
### JSON格式很重要
### 数据类型很重要
### 掌握数据类型的使用方式很重要
## 函数的定义和使用很重要很重要
### 变量的命名很重要
### 如何实现数据换数据很重要
### 很多的语法在特殊的环境下才重要
#### 技巧:
#### typeof可以用来验证数据的类型。如:
` typeof [1 2 3] => 'object' `
` typeof 'hello' => 'string' `
对上面提到的重点脑子里都没有概念,都没有感觉?这就对了,“**Hello, JS!**”,这世界现在暂时还没有跟我们建立联系,既然我们来了,就认真学,得好好的接触,深入接触这个世界。意义是我们自己活出来的。
首先自己遇到了问题,google先行,再不行,就bing ,就百度,反正肯定有办法搜到点东西出来。自己独立的在这个世界里面走一走,熟悉一下环境。看不懂的,多看几次,反正输入到大脑的数据库里,肯定是有价值的,然后感觉就出来了。看书,看issue,这是你手上配备的资源。自己琢磨好久了,还是琢磨不出来,请教别人,请教前辈。前提是要学会提问,问题的质量决定答案的质量。(包括看书)
看完了老师在github上的《第一次使用JSON》,对JSON还是没什么感觉,于是google先行。搜索"JSON"结果找到了阮一峰09年写的一篇文章[《数据类型和Json格式》](www.runyifeng.com/blog/2009/05/data_types_and_json.html)。阮一峰通过看一种数据交换格式的文档,得到了顿悟,从而对编程世界更加的了解。接着在留言下面找到了阮一峰推荐的一个JSON入门教程《Mastering JSON》,然后也把这个文章找来看了2次,有看不懂的地方,但是现在对JSON有感觉了,知道了value是可以放任何数据类型的,而不只是字符串。JSON是一种非常简洁,优雅的,可以储存任何数据类型的数据交换格式,唯一的限制是人类的想象力和硬件的存储空间。
即便没有去google, 没有主动去查上面的概念,但只要还在JS这条路上,就会越来越体会到上面东西的重要性,这些东西贯穿整个JS,是编程世界的基础设施,最终该弄懂的还是要弄懂,心甘情愿的弄懂,扎扎实实的弄懂。**基础不牢地动山摇。**同时老师还提到这里有个大坑:**“学到编码技巧,但是不知道做什么事情,不会给自己找需求,是不会有进步的。”**没有把学到的东西用出来,是不会有进步的。自己无欲无求,心中没有重要的东西,或者是不知道有什么重要的东西,没有目标是不会有动力去进步的。感觉无所谓的时候,怎么可能有动力去克服该克服的困难呢?就像考试前知道有一些知识点不会考一样,如果复习只是为了考试的话,怎么有动力去学?所以必须问自己“什么是重要的?“不断问自己,不断琢磨,否则就无所谓了,否则就没有感觉了,就没有进步了。这个需求必须很刚,很刚,刚到没有它就影响到生活。找到了这个需求,接着就是进步很大。
================================================
FILE: homework/lesson3/guowei.md
================================================
# 小白JS入门不放弃 lesson3
*Focus Question* 当我们打开浏览器输入url地址后,到底发生了?
### 网页数据交互
根据老师上课内容,网页数据交互,简单的讲,是浏览器与服务器的数据交互。这种数据交互是通过http协议交互的。
我理解的整个交互过程分为4步骤:
1. 用户在浏览器中输入url地址,浏览器发送一个HTTP请求到服务器。
2. Web服务器解析请求,回传一个HTML文件到客户端。
3. 浏览器解析回传的HTML文件,再次向服务器发送HTTP请求。
4. 服务器传回CSS和JavaScript文件,浏览器解析并执行代码,显示网页。
***
================================================
FILE: homework/lesson3/hanwei.md
================================================
## 第三次作业
我们平常使用的app以及网页本质上就是数据交互,即我们提供一些数据出去,又收回一些数据。这个过程中的数据一般要经过服务器处理,可能是直接和服务器进行数据交互,也可能是通过服务器再和第三方进行数据交互。这有些像我们以前的寄信,将自己的内容写好封装在信封里,然后通过邮政网络层层上收,之后经过分拣,在层层转送出去。数据交互本质上也是这样的,我们将自己的信息封装在数据文件里面,比如json。之后通过网络发送出去,之后经过多个局部网络的传送之后到达了服务器。服务器之后对数据进行分拣,之后又经过层层网络将数据文件送到目标的手中。这个当中的服务器就像邮局一样,内部也根据功能划分,有的负责接收,有的负责分发。和传统邮政不一样的是,这里的服务器会为数据加上数据标识,这样数据相当于被权威认证过了,可以有效防止数据来源的伪造。比如在传统的寄信中我们就可以使他人的姓名和地址伪造他人的信件,当然以前也许可以通过笔迹来识别,但是在互联网上更靠谱的方式是通过一个权威的服务器,来确认来源身份。
nodejs是一种**运行环境**,它是一个运行时。只要我们输入相应的代码,它就会实时给我们一个反馈和结果。需要执行的代码和nodejs运行环境又构成了一个完整的运行环境。也就是说,只要具备了这些东西,这个环境就可以真正跑起来,来实现我们想要的功能。只有nodejs运行环境而没有需要执行的代码,那么运行环境也只是处于一种等待运行的待机状态。
一个函数和变量定义了还要使用,否则的话就是浪费存储空间,以及声明定义甚至复制的过程。
我们在使用函数名的时候要尽可能的使函数名反应出关于变量的更多信息,或者是需要解决的问题的问题点。因为我们写出的代码可能需要别人看,这样当变量包含了足够的信息别人能够很容易的理解,而不至于要通过变量作用、函数功能等使用上的信息来推出它的含义。应该做到看名称就能明白这个变量或者函数就能明白这个变量指向了什么意义或者这个函数有什么作用,而不是需要别人去阅读和分析后才能判断。退一步说,即使代码是给自己看的,由于人的记忆有时是靠不住的,为了防止自己的编写代码的过程中方便记忆不至于写着写着忘记代码名或函数名,又或者忘记一个变量或函数是做什么的做的这一步也是应该的,这样做还能很大程度的避免日后看不懂自己的代码。此外,如果能加上相应的注释的话会更加友好,养成这些习惯对提高自己的代码可读性有很大的帮助。而代码可读性高,正是一个优秀程序员的特质。
================================================
FILE: homework/lesson3/hewei.md
================================================
# 第四课代码学习笔记
## build_a_human.js
在这个 js 文件中,用的是表达式函数定义法:
```js
var buildPerson = function () {
...
}
```
在阅读《JavaScript 权威指南》第三章的时候,书里也提到了这个知识点,但只是一笔带过。
用关键字 `js how to understand expression function` 进行搜索,结果第一条就是 MDN 上的文档,文档中还说明了函数表达式与函数声明的区别:
- 函数表达式中的函数名可忽略,这样创建的就是匿名函数。
```js
var x = function(y) {
return y * y;
}
```
- 函数表达式可以用作 IIFE(立即执行函数表达式),在定义之后就立刻执行。
- 函数表达式没有被提升,所以只能在定义之后才可以调用。
```js
notHoisted(); // TypeError: notHoisted is not a function
var notHoisted = function() {
console.log('bar');
};
```
- 命名的函数表达式,会将其作用域限制在函数体内部(官方文档里的这段话没看明白……)下面的函数 `factorial()`,只能通过 `math.factorial(x)` 的形式调用。
```js
var math = {
'factorial': function factorial(n) {
if (n <= 1)
return 1;
return n * factorial(n - 1);
}
};
```
参考文档:[function expression](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function)
## sound_off.js
第一个报数的示例,是用顺序执行的方法来演示的。
老师用的是最原始的方式,把所要输出的内容手动地一个一个输出来。
稍微高级一点的方式,就是用循环了。结合前学过的函数声明和函数表达式,可以用两种形式来写这个循环。
```js
function solider(i) {
console.log(i + '到');
}
// 第一种循环形式
function startCountOff() {
for(var i = 0; i < 5; i++) {
solider(i+1);
}
}
// 第二种循环形式
var startCountOff = function() {
for(var i = 0; i < 5; i++) {
solider(i+1);
}
return 1;
}
startCountOff();
```
不管是哪种循环形式,输出的结果都是相同的。那么是该使用函数声明的形式,还是函数表达式的形式,就要根据两种方式各自的特点,以及实际的需求,来决定了。
## sound_off_2.js
第二个函数是用嵌套的方式来演示的。
为了尽量让大家能够看懂代码,老师依然是把可以写成循环的部分都一个个具体地写出来了。
而如果用“真正”的循环,应该写成什么样子呢?自己尝试了一下,写成了下面的样子,感觉写出来的代码还是不够精简。
```js
var currentSolider = 1;
var soliderCount = 5;
function CountOff(soliderCount) {
while(currentSolider <= soliderCount) {
console.log(currentSolider + '到');
currentSolider++;
CountOff(soliderCount);
}
}
CountOff(soliderCount);
```
说明一下上面的代码:报数是从第一个士兵 `currentSolider` 开始的,当前士兵先报数(`console.log(……)`),然后将报数的任务传给下一个士兵(`currentSolider++`),下一个士兵继续报数(`CountOff(soliderCount)`)。
当所有士兵(`soliderCount`)都报了数的时候,就可以结束了(`while(……)`)。
## sound_off_3.js
在第三个示例中,老师则是通过定义五个相似的对象,并依次调用各对象方法的方式,来为大家展示对象方法应当如何使用。
之前在学 C# 的时候,知道对象的构造函数,可以在对象实例化的时候进行一些操作。那么 JS 中能否实现在创建对象的时候,利用构造函数或者其它的特性,让它输出指定的内容呢?
用关键字 `JS 构造函数` 搜索,第二个链接就是 SegmengFault 上的文章:[深入javascript——构造函数和原型对象](https://segmentfault.com/a/1190000000602050)。文章中讲到了几种创建对象的方式,其中 `使用 new 关键字创建`、`使用对象字面量创建` 都只能通过调用对象的方法来输出。而 `工厂模式` 和 `构造函数` 这两部分自己还没有看明白,先记录一下。
下面的代码,是自己仿照着 `工厂模式` 的形式写出来的。
```js
function soliderObj(i) {
var o = new Object();
o.i = i;
o.countOff = function() {
console.log(i + '到');
}
return o;
}
for(var i = 0; i < 5; i++) {
var soliderInstance = soliderObj(i + 1);
soliderInstance.countOff();
}
```
## kitchen_workflow.js
老师通过拆解准备一桌酒席的流程,向大家展示了如何将实际生活中的事物,转化为代码。
老师的讲解过程,是从细节到整体。也可以反过来,从整体到细节。
准备一桌酒席,需要几大步:
1. 基础的准备工作,比如打扫后厨,清洗各类用具,等等,在程序中就是 `prepare()`。
1. 基础的环境准备好了,还要去采购烹饪所需的菜、肉、蛋等各种原料,在程序中是 `buyFoods()`。
1. 一切准备就绪之后,就开始烹饪每一道菜肴,在程序中就是 `cooking()`。
1. 这四步工作加起来,就是准备酒席的完整过程,在程序中就是 `startWork()`。
而每一步之间,又是有着互相依赖的关系:
1. 基础环境准备好了,才能做所有后面的工作,所以用 `if(prepare()) {...}` 来进行条件的判定。
1. 采购好的各种原材料,要交给厨师去做菜。所以 `buyFood()` 要 `return foodsList`,然后 `cooking(foodsList)`。
1. 做好了每一道菜之后,客人才能享用,所以在 `cooking()` 中才会有 `return feast`。
整体的流程和互相之间的依赖关系明确了,其实整个程序基本就出来了。
================================================
FILE: homework/lesson3/huangBiLing.md
================================================
## 第三节作业
补交
这是补得非常迟的作业...
第一个图是照着老师的图改的。

第二个图是原来自己做的...

第三个图就是参考的童鞋P的老师的图了。

说实话,还是不明白时序图跟流程图有什么区别...我还是先写"流程图"。
================================================
FILE: homework/lesson3/jianglin.md
================================================
### 姜琳第三次课总结
#### 今天学到了什么
关于语法的部分,因为和C++的都是通用的,唤起了将近十年前的记忆……
关于命名的部分是以前没想过的。以前只在考试的时候应用过i,j,k,当然是为了简便,而且没有大型的程序,学完之后想来,命名复杂,带来的是后续的各种方便,非常的值得。就像项目管理的计划做的细致一些,对后面的工作非常有意义。
关于前端后端的部分,老师的介绍简明扼要。话说之前差点想报新大的全栈营,是因为时间和没Mac电脑才放弃了。不过看老师回复其他同学说做管理很适合从JS入手学习编程,又很庆幸啊。跟上入门班,争取进阶班!
#### 笔记
提问途径:先思考、再google、再去新大APP找、去项目找、去微信群
json格式:交互对象,JS里常用的交换数据的格式
命名的力量:除了在赋值循环变量以外,不要再用i、j、k,也不要用简单的start、end。
驼峰命名法:第一个单词首字母小写,后面单词首字母大写。
要what不要how:针对命名,说what更有效,比如不用 inputID而用nameID。要问两个问题:完整代表了变量的含义吗?以问题为导向了吗?
w3c看到JS Break之前的基础内容。
后端是处理数据,前端是提取数据,刷新页面,将数据更好的呈现。
================================================
FILE: homework/lesson3/leizhen.md
================================================
## 第三次作业
题外话:
我一直很奇怪老师怎么很少教代码,原来真的不在教代码,而是在教学编程的思想,在给我们设计学js的架构。我tm还懵了几节课,路和方向都给我们指明了,要真学不好,就真的不是智商的问题了。
lesson3的总结:
重点:理解浏览器和服务器之间的交互图。
以前觉得这个东西一点都不重要,现在老师说要画图,绝对很重要。对于前端的理解很重要,但我还是不知道这个现在理解了有什么用(可能以后知道把)。
nodejs是js的运行环境,软件架构就好似设计图:
知道了软件架构是什么了之后,nodejs是运行环境就不难理解了,它能提供服务,又怎么会是架构呢?
数据类型的价值:不同的数据类型决定了代码执行的效率。
和上一次作业总结的一样,果然是为了高效。
定义了后还要使用,不然没有价值:
在terminal中运行name_style.js,很奇怪没有一点输出,进入js里查看代码后才发现全是定义,难怪没有输出。
命明用what,而不是how:
没有上老师的可之前还真是随意命名的,只要自己看的懂就行了,但时间长了之后,xd连自己都不知道这个文件里面是什么东西。总结完后,马上对电脑的文件重新命名一次。这次可光是学会命名感觉就赚大发了。自己学js可能这方面还真不会察觉。
================================================
FILE: homework/lesson3/lichen.md
================================================
###第三课摘录
不同的数据类型决定了代码执行的效率。效率包括:`存储效率,计算效率,传递效率`
`运行时`是一种面向对象编程语言的运行环境。
`node.js`是一种运行环境。
一个整型可以转化为字符串。一个字符串也可以转化成整型,仅限于数字,是为了传递效率更方便
命同时兼顾简洁和精准,能够推导出更多的信息,能够反映问题(是什么what)而非解决方案(how)
表达式语句不是表达式
`1 + 1;` 是表达式
`Var age = 18;` 是表达式语句
`if (age >= 18)`里的`age >= 18`就是表达式
编程里面三大结构:`顺序、循环、条件`
一个分号`;`结束就是一条语句
####针对以下代码做改变实验:
for (var i =0, j = myLikeColorsList.length - 1; i < myLikeColorsList.length /2 ; i++, j--) {
console.log(myLikeColorsList[i]);
console.log(myLikeColorsList[j]);
}
**改变后能成立的例子:**
var i = 0, j = myLikeColorsList.length - 1;
undefined
for(; i < myLikeColorsList.length / 2; i++, j--) {
... console.log(myLikeColorsList[i]);
... console.log(myLikeColorsList[j]);
... }
blue
write
green
black
undefined
**改变后不能成立的例子:**
var i = 0, j = myLikeColorsList.length - 1;
undefined
while(i < myLikeColorsList.length / 2; i++, j--) {
... console.log(myLikeColorsList[i]);
... console.log(myLikeColorsList[j]);
... }
//无结果
####浏览器和HTTP摘录
浏览器其实就是一个APP。
HTTP是一种超文本传送协议(HyperText Transfer Protocol),是一套计算机在网络中通信的一种规则。在TCP/IP体系结构中,HTTP属于应用层协议,位于TCP/IP协议的顶层。
HTTP是一种无状态的的协议,意思是指 在Web 浏览器(客户端)和 Web 服务器之间不需要建立持久的连接。整个过程就是当一个客户端向服务器端发送一个请求(request),然后Web服务器返回一个响应(response),之后连接就关闭了,在服务端此时是没有保留连接的信息。
HTTP 遵循 请求/响应(request/response) 模型的,所有的通信交互都被构造在一套请求和响应模型中。
================================================
FILE: homework/lesson3/lipeng.md
================================================
# 流程图怎么画?
1.
### 什么是流程图
想不起来了。翻开老师的ppt,找到相关页面,奥,这个就是!

2.
### 画什么流程图?
浏览器、服务器,跟老师的例子差不多嘛。可是又又不一样。还好,老师讲了浏览器先从服务器拿html,然后再拿css和javascript。恩基本就是这样了。

3.
### 用什么画?
纸笔吧。先走一个草稿。看看画什么。恩,比葫芦画瓢,比客户端登录的流程图画浏览器和服务器的流程图,这个倒不难,何况老师还讲了第 2点。

4.
### 正式画,拿出铅笔、白纸、三角板。
**线画的直,表示咱们态度好!!!**
先画两个框,代表 浏览器和服务器。
可是这个框,要摆在白纸的什么位置,要画多大?妈蛋,还不如学学一个软件,那个得劲儿。算了先画了这张再说。
于是,我先量了量白纸的宽度,妈蛋,三角板刻度用完了,还不够

用更长的尺子才能量完。恩,量完了,21cm。

我想,假定一个框宽3cm,两个框是6cm,21 - 6 =? 15cm。两边分别留白5cm,间距5cm,刚好21cm!!! 天才。

很快,半小时之后,基本画完了,用iPhone 6s拍照留念。
5.
### 美化图片
拍出来歪歪扭扭的,先调整各大小,把漏出来红色桌面截掉。恩,两边留白再平衡一下。恩,发到电脑上看看。
这么黑,右下角还有一块拍照手机的影子!

再在手机上调一下光,恩,黑白效果很赞。再发到电脑上看一下,手机的影子几乎不见了:

前后对比还是很明显嘛。感觉太白了,嗨,下次还是学习用软件工具吧。
6.
### 大工告成,交作业!!!
传git,
我知道,传 git 前,要先 把upstream的流弄下来。[感谢 @新大张丽娜同学 的帖子](https://github.com/xugy0926/getting-started-with-javascript/blob/master/topics/%E5%A6%82%E4%BD%95%E4%BB%8E%E4%B8%BB%E9%A1%B9%E7%9B%AE%E6%9B%B4%E6%96%B0fork%E7%9A%84%E9%A1%B9%E7%9B%AE.md)。
可是怎么丢弃没有add的改动呢? 研究了一下:
```git
git checkout -- filePath
用来清除 filePath ,没有缓存,但是不想要的改动。
filePath 也可以是目录,比如当前目录 . 或者上级目录 .. 就是这个目录下所有 未add 的改动。
```
7.
### 总结
三角板不够长,准备一个直尺很重要!
三角板不够长,准备一个直尺很重要!
三角板不够长,准备一个直尺很重要!
老子一定要学一个 软件工具,画流程图!
老子一定要学一个 软件工具,画流程图!
老子一定要学一个 软件工具,画流程图!
================================================
FILE: homework/lesson3/liujuanjuan1984.md
================================================
# JS编程入门Lesson3作业
by刘娟娟2017-08-28
## 浏览器与服务器的交互图

非常粗糙的图,直接用excel标记的。我确实想节省时间,赶上进度。
第三节课,印象中依然是在讲变量命令规范。这带来的易读性很重要,利己利人。
一个可以分享的小技巧:
直接在你自己github的项目issue中粘贴图片就能获得地址。
================================================
FILE: homework/lesson3/liuxiaohaohao.md
================================================
# 流程图是一个很好的表现形式
>“既然学习了技术,就要尝试用技术的表现手法来表达我们的意思。同样,流程图可以运用在各行各业,可以很清楚的表达交互的过程。”
关于流程图我的理解是:事无巨细地把事情操作的每一个步骤设计出来,同时在设计的过程中考虑到每个步骤会遇到哪些问题,并给出相应的解决方案。
在设计过程中也要注意到无重复,无遗漏。流程图的设计过程,就是帮助自己梳理事情运行的逻辑,帮助进行下一步执行的设计。
#nodejs是一个基于Chrome V8引擎的Javascript运行时。
运行时是一种面向对象编程语言的运行环境。nodejs就是js的运行环境。
#数据类型的价值
不同的数据类型决定了代码的执行效率。效率包括:存储效率,计算效率,传递效率。
#定义了就要使用
定义了变量,一定要使用。数据类型很重要,对于不同类型的使用方法也很重要。函数很重要。
#命名的力量
大多数人在命名这件事上都是被误导的。你写得代码很6,运行也没有问题,但是别人看不懂啊!这就麻烦了。这也是高手和普通程序猿的区别之一吧。
原则:1.你的名字一定要包涵更多的信息,不能让人一看内心产生了很多意思,去猜测你的意图到底是哪个。
2.要what不是要how,就是说你不能只是描述动作,你要展现出内容。比如,“打架”就是一个动作,而“打小明”就是动作之上的内容,“打架”就不如“打小明”好。
好名字的判断依据:1.完整代表变量的含义了吗?(更多的信息)
2.以问题为导向了吗?(反映问题而非解决方案)
#需求
要思考为什么老师会想到这个需求?要自己给自己找需求。而需求需要建立在你的思考,逻辑上。
================================================
FILE: homework/lesson3/panqi.md
================================================
# 第三次作业
**关于Markdown的用法,今天忽然想到之前在新生大学微信公众号中看到过一篇相关文章(作者是乔向阳),当时对这种方法很陌生,只是进行了文章收藏,搜索出来通读之后,对一些基本用法有所了解,知道了第一次作业格式不对的原因是在#后面没有空格,在提交第二次作业时已进行修改。再次提交作业,进一步理解和巩固了git的主要用法,关键还是要多用!**
## 阅读两份代码
*之前看老师在第二课给出的代码时,纯小白的初次,超级懵!开始都没有理解很多内容是为了便于学习做出的注释,敲代码时照单全打;也不晓得可以分段敲完,就运行看看什么状况,傻傻的一直在敲,感觉好长、好无助!如今再回看,也不是那么难哦!*
### 变量命名要点
-完整代表变量含义,能够推导出更多信息。要具体明确,不能简单模糊。
-以问题为导向,反映问题而非方案。要体现“是什么”,而不是“怎么办”。
**数据类型:数字(number)、文本/字符串(string)、布尔(boolean)、数组(object)、对象(组合数据)(object)。**
**定义变量、赋值给它、使用。**
### 各种语句
1. 表达式语句/赋值语句:诸如赋值和函数调用这些有副作用的表达式,可以作为单独语句,把表达式当作语句的用法,也称做表达式语句。(摘自犀牛书)
2. 条件语句:if、switch
3. 循环语句:for、while
-初始化变量:var i = 0;
-循环条件:i < myLikeColorsList.length;
-计数器变量更新:i++;
_多种表现形式:常规写法、初始化变量提前、初始化变量提前和计数器自增放在循环体内,多个初始化变量、多个计数器变量更新。_
_轮询数组:两头同时轮询,时间只用一半。_
**阅读代码、敲出代码、运行代码,通过一遍练习有了初步概念和认识,对照犀牛书的相关内容大概看了一下,并不是很明白,自己看书明显没有跟随老师的传授、总结、提炼、引导那样有感觉,也许是自己太白了,还没有培养出编程思维方式,而且学习犀牛书的时间太少了,也没有完全掌握要领,只能在不断做、不断学、再做、再学的多次反复过程中逐渐领悟。**
## 抓紧补课
趁着休假期间,努力补习之前的课程和作业。今天认真阅读了老师在技术文档里写的几篇函数相关文章,明天要结合第4节课给出的代码进行练习,在实操中加深对函数的理解。自己要加油,期待在最后一堂课上能够参与完成老师设计的小节目!昨天直播时,老师提到其实课程结束时,对于大家来说只是一个开始,正如开课时老师就说过,这门课更多是希望大家转变思维模式、多角度思考,能够习得分析问题、解决问题的能力。即便掌握了基础入门知识,后面仍需要时间扩充学习内容,通过创建运营具体项目,在使用中不断完善和提高。关键在于用,一段时间不用,学过的知识就都全盘交还给老师了。
这次还报名了安卓开发那门课,只听了两节,完成了最初一次作业,当时提交的时候特别开心,但后期因为时间的原因,还有电脑配置差异,落下课程就跟不上了,只好放弃了。还好,JS课程仍在努力学习,也学到很多东西,后面内容难度增加,要投入更多时间和精力,相信一定会收获满满!
================================================
FILE: homework/lesson3/sophieQi.md
================================================
## 浏览器和服务器之间的交互图

## 老师给出的浏览器和服务器的顺序图

#### 变量名称
> 1. 完整代表了变量的含义吗? -> 推到出更多信息
> 2. 以问题为导向了吗? -> 反映了问题而非解决方案
从定义的变量名称,可以看出是什么类型的变量;不能是统称的名字,可以具体到事物本身。
定义一个变量,赋值給他。赋值了就要使用,才有意义。
变量名称要符合是how,不是what。
*举例:*
```node
var end = 100; // bad。 end什么?不明白
var endCount = 100; // good。可以推导出是结束数字,number类型。
// 表示一个输入的雇员信息(inputData不好,只能表示是输入的数据。输入的什么数据?不清楚。只知道how,不知道what。)
var employeeData = { // good。 这是个雇员的数据(很明确知道what是什么),很清晰。
name: 'xiaoming',
age: 18,
sex: 'man'
}
```
================================================
FILE: homework/lesson3/taobao.md
================================================
# lesson3_第三次作业_交互图
This is the addtional homework for lesson3. The instructor suggested two main points:
1. two examples about how date transmission between two devices.
2. the most important thing starts with beignning. how to name the varible
compare with how date transmission between two devices, I think that memory work theroy is more important. If news can understand how one line code as date trasnfer between different function. However, they also need to know hwo to change the typre of Date, and make more efficily on transmission. It also need information about global scope and loacl scope. I will wriet one paper for the memory of Javascript.
On the other hand, the basic skill, how to name varible, is most imortant. The instructor says :"One good programmer is use the best way to solve your problem", but I also believe that "Any of other programer can easily understand your code and update them." Before this lecture, I think I can put as many commit in the file and make the variable more meaningful. Recently, I realized that I need to make my varible more formal and meaningful. I need to define not only how this date do but also what is this date. Here is the example:
var input = ();
var inputPersonName = ();
---
第三次课程,讲解数据交换,给出了基本的数据类型,并且引出了数据类型的转换用于其自身的特性:传输效率,储存效率,计算效率。而后讲解了命名的重要性,分享了自己的经验,“要what 不要how”,以次来使声明的更有意义。 同时表示了如果只是声明而不定义的话是没有意义的。
---
已解决问题:
1. 声明了node.js 是运行环境。(运行时)
2. 命名的tips
新的问题:
https://github.com/xugy0926/getting-started-with-javascript/blob/master/study/lesson3/statement.js
1. 第74行代码,如果第6行代码不是4个数据,或者说不是偶数个数据,那样中间的数字就会重复输出。这样是不是要进行预先的length 判定,还是说在最后输出的时候进行删除重复项?但是数据库提取中,这样会无形曾加一组数据出来
----
2. 老师教下抓包放包,或者有教程推荐吗?中英文都可以,之前自学不是很思想,今天写作业的时候,经常报错
================================================
FILE: homework/lesson3/wangwei.md
================================================
## 1. 阅读study/lesson3的两份代码。
>已阅读
## 2. 画出浏览器和服务器之间的交互图
> 
================================================
FILE: homework/lesson3/wangyunfei_zongjie.md
================================================
## Lesson three 课程总计
## 一、
本节课,是JavaScript入门第三节,课程一开始讲解的是数据交互的实际案例。直接上了两个例子。
一个是新生大学app账号登录,另一个是微信发消息。这两个例子在实际应用场景下都是很简单的操作,但是经过剖析,其实都是代码一步一步运算的结果。
计算机不是人脑,他没有人那么聪明,人的话可以通过思考直接判断对与错。而计算机必须先赋予它相关的值,并通过逻辑运算才能判断false与true。
通过这两个例子,切身能体会到代码在程序实际运行中的一个存在感,一种代入感。
之前的课程,一直不明白,布尔类型,false与true用在何处。原来在账户登录这一个环节中,就是典型的一个运用。
密码的对与错,程序他只能判断为false与true,屏幕上弹出的密码错误,那只是程序在判断为false后弹出的一个message。而message并不是计算机的一个逻辑运算结果。
微信发消息这一实例,就能很形象的把 “对象”这一数据类型,带入到环境中,实质上微信中发送的一句话,实际上就是一列对象数据。
## 二、
既然是数据交互,那当然得有交互的双方。一方是操作端,另一方就是服务器。说道服务器,我更形象的觉得他就是个幕后操作端,一个黑盒子。在后面课程中,老师又剖析了网页交互原理实例。
浏览器与服务器的交互实例,与app账号登录这两个实例,既有共同点,也有区别。
两个例子都是通过前端操作与服务器之间进行数据互动。 但是app登录实例,不仅体现了前端与服务器的交互,更能体现出数据在服务器里面的一个逻辑运算,然后反馈给前端。
而浏览器与服务器之间的交互,更直观体现的是数据与服务器的一个相互请求与访问。但是我认为这两者之间其实可以相互嵌套的,在网页中也可以嵌套进账户登录这样的模块,建立起前端与服务器间一个复杂而又紧密的交互关系。
## 三、
今天的课程除了实例,自然少不了干货。今天即复习了以往的JavaScript知识,也讲了一些新的知识。
今天的课程又让我更深刻认识了数据类型。数据类型虽然类型繁多,但是他们之间也有联系。比如:字符串类型可以强制转换为整形。 虽然有些数据类型在某些场景下都可以通用,但是他们之间也是有区别的。
#### “不不同的数据类型决定了了代码执行的效率。效率包括:存储效率,计算效率,传递效率”
课程中着重提到了变量的命名。 这个名字虽然可以叫阿猫,也可以叫阿狗,也可以叫其他。
同一个变量,不同的命名,所赋予的意义是完全不一样。
变量的名字要尽可能的包涵更更多的信息,方便更多的人阅读。
## 四、
在课程中,老师也提到了函数,更在实操中提到了语句。
#### 语句包含:表达式语句/赋值语句 、条件语句(if、switch)、循环语句(for、while)
条件语句与循环语句,我更感觉是在为代码的运行提供一个运算的框架、限制条件....更多的理解,需要我们更多的实操,来加以理解.....
## 五、
根据课程内容,我将本节课的作业,用白纸勾勒出了浏览器与服务器的运行图,一共三幅图,请老师恕我绘画水平低下、与课程理解的浅薄。
因为作业关系,我需要去网上搜索相关信息。搜索的平台主要是百度,这方面的信息很少能搜到权威性的解释,主要是以网友论坛发帖为主。
网上的这些关于交互信息的帖子,包括其他的编程知识,在这些论坛、发帖中很多很多,甚至用一个话题都能产生很多观点。
作为小白的我,确实增长了很多见识,但是由于自身是小白,很难甄别其中的真伪。甚至会产生误导。
有些帖子都是十几年前的发帖,但是并不能因为帖子年数长,就断定帖子的内容有误,作为小白的我,也只能多看不同的论坛,多看帖子下面评论与回复,根据理解,理性的采纳。
浏览器交互信息网上一搜索,一大堆发帖,虽然不同的版主他们的观点不一样,但是大致原理都是一样的。同时也能看到其他的知识点,比如:Http协议、用户界面、浏览器引擎、渲染引擎、 UI后端、JS解释器、GET方式、POST方式......
不过这些知识点,都不是在一个版主下,而是在很多个网页里、论坛里,显得难免有些鱼龙混杂。需要我们耐心的去学习。
我是一名学习js语言的小白,我正在努力入门中.......
================================================
FILE: homework/lesson3/wenliuxin.md
================================================
# 如何学习编程
* 自学
* 老师提示重点
* 问
## 材料:
* 书
* W3c
## 思考途径:
* 自己思考
* 去新大app论坛
* 去老师github的issue看
* 群里问
# 数据交互
前端获取信息,推送给后端,后端核对,推送消息给前端;登陆失败,登陆成功。
# 运行环境
Node.js 是运行时,也就是运行环境。
node.js可以看作一个内部有V8引擎、内置库的正在运行的服务或软件(就是运行环境)。它正在运行,node sample.js在node里解析代码翻译代码...包括clone、IE都是js的运行环境。
# 数据类型的价值
一个整型所占的内存是确定的,如1、2、3。
但是一个对象、string等所占的内存是非常大的。
.length()获得长度,其实它已经帮我们做了很多功夫。
# 定义了还要用
没有用的定义,没有价值。
用,还不一定只是直接用,数字string可以转化为整型,整型也可以转化为string
# 命名的力量
用what而不是how
要推出更多的信息,并且信息确定,而不是什么都可以
# 网页交互原理
输入网页地址,请求访问
服务器接收,发送html文件给用户
网页解析代码,发送请求css和js
服务器发送css,js给用户
================================================
FILE: homework/lesson3/wufan.md
================================================
# 阅读study中lesson3的两个代码文件
一 命名要清楚,要让人读懂,更友好一些。好的命名判断标准:
1得出是什么数据类型或者更多内容的信息;
2得出一个具体的信息,可以精准确定位置。
二 表达式与表达式语句、赋值语句的区别:
* age = 18 这是表达式
* var age = 18 ;这是表达式语句
var age;
* age = 18;这是赋值语句
* for循环语句的初始值语句,条件语句,计数器变量更新语句。
* switch语句适用于有限个样本空间元素的使用,其余不应用,特别注意default的使用
* while和do while的区别就是符合条件执行,和不管符合条件与否先执行,然后符合条件再执行。
# 画出浏览器和服务器之间的交互图

================================================
FILE: homework/lesson3/wukuipin.md
================================================
### 碰到一个问题
#### 仓库同步时出错
根据《Git常用操作笔记》文档里面的提示操作,将自己的仓库可老师的同步。在执行:
```
git fetch upstream master
```
出现以下错误提示:
```
git fetch upstream master
fatal: unable to access 'https://github.com/xugy0926/getting-started-with-javascript.git/': Failed to connect to github.com port 1080: Operation timed out
✘ antarts@wukuipindeMacBook-Pro ⮀ ~/javascriptbridge/getting-started-with-javascript ⮀ ⭠ lesson3_homework_wukuipin ⮀ git remote -v
origin git@github.com:antarts/getting-started-with-javascript.git (fetch)
origin git@github.com:antarts/getting-started-with-javascript.git (push)
upstream https://github.com/xugy0926/getting-started-with-javascript.git (fetch)
upstream https://github.com/xugy0926/getting-started-with-javascript.git (push)
```

#### 解决办法
1. 在终端执行:
>git remote rm upstream
2. 将 https:// 更换为 git@ ,同样终端执行:
>it remote add upstream git@github.com:xugy0926/getting-started-with-javascript.git
3. 然后再按照《Git常用操作笔记》往下操作即可。
这是我更换后,成功同步的画面:

#### 总结
对于出现这个问题的原因不是很了解,似乎是代理的问题。希望这能帮助到遇到同样问题的同学!
================================================
FILE: homework/lesson3/xianengqi3.md
================================================
## 画出浏览器和服务器之间的交互图
*我仿照了'老师的课件'照着画了一遍,自己又模拟了3遍草稿*
---
> 画流程图的自我体验
刚开始画的时候完全没思路,不知如何下笔,喝着矿泉水酝酿了一小会,顺便去上了个厕所,拾起笔照着老师放出来的两张图片开始画。
**打了三张草稿**
1.'第一遍'和'第二遍'完全依葫芦画瓢。
2.第三遍在脑海里整理了自己访问'新生大学'网页的流程,梳理了一遍访问'新生大学'的思路。
以下是梳理的思路
---
*我在浏览器输入'新生大学'网址----->>>>浏览器把网址传给服务器---->>>>服务器接收后---->>>>把解析好的'新生大学'主页返还给浏览器---->>>>浏览器收到了'新生大学'的主页,发现主页里有好多课程,我找到了'徐老师'的课程 给我吧---->>>>服务器甩给浏览器'徐老师'的课程---->>>>浏览器接收了服务器传送过来的'徐老师'课程---->>>>最后我通过浏览器看见了'徐老师'的课程。*
**感觉好拗口,嘻嘻**
## 浏览器和服务器的交互图

---
字迹有点潦草
> 禅定时刻
日出东海落西山,愁也一天,喜也一天,
遇事不钻牛角尖,人也舒坦,心也舒坦。
**引用
---槽边往事
和菜头。
================================================
FILE: homework/lesson3/xiaochaoge.md
================================================
# 第三课 程序大小和程序的运行效率
[TOC]
这节课关于代码部分,想到之前玩的一款编程游戏对程序大小和程序的运行效率这件事,就拿出来聊一聊,也当作这节课的小结吧。
## 游戏介绍
**游戏** : Human Resource Machine

这款游戏更多像一个**伪代码**,去实现一些程序的需求,满足要求的程序就能过关,但在游戏中,有两个特殊条件,满足任何一个条件,这个关卡会达到一星,而分别满足两个条件,就能达到**两星**。
游戏的下载地址见文末。
## 游戏规则
这两个条件是:
> 1. 程序长度的最短;
> 2. 程序执行的步数最少。

## 第一颗星
我想说的就是这个游戏的 `第二关 繁忙的收发室` 的两星之旅:
你需要输出 10 个数字
> **要求1**: 不能使用超过三个命令
> **要求2**: 平均不超过25步

那我们有哪些代码呢?

inbox 就能输入,outbox 就能输出,jump 跳出循环,不能使用超过三个命令几乎很简单了:
```
-- //jump 返回的位置
- inbox
outbox -
jump
```

但是我们算算第二个要求:
每执行一个数字,需要 `inbox -- outbox -- jump`,三步程序。10 个数字,10 × 3步 = 30 步,虽然程序很短,但是根本做不到不超过 25 步。
## 第二颗星
10 个数字怎么做到步数最少?
每一个数字执行一个 `inbox -- outbox `,但并不`jump`,即不使用循环体,需要多少步?
10 × 2 步 = 20 步,已经能实现目标了。但是这样的程序长啥样
```
- inbox
outbox -
- inbox
outbox -
- inbox
outbox -
……
//一共有 10 个 inbox, 10 个 outbox
```
这样的程序难免有点无聊,而且易读性太差,能不能使用循环体,但是简化流程呢?
循环体的出现,使得代码的阅读次数在循环体每遍历一次,就多运行一次,换句话说,循环体内执行的程序次数越多,效率越高。
```
-- //jump 返回的位置
- inbox
outbox -
- inbox
outbox -
jump
```

如果代码变成这样,执行的次数会怎么样呢?
每执行 2 个数字,需要 `inbox -- outbox --inbox -- outbox -- jump`,五步程序,比之前执行 2 个数字,需要`inbox -- outbox -- jump -- inbox -- outbox -- jump` ,六步程序,少了一步。
对10 个数字而言,**(10 ÷ 2) × 5 步 = 25 步**[^1],达成目标。
[^1]: 每执行 2 个数字需要 5 步,10 个数字,10 ÷ 2 ,循环 5 次,每次执行 5 步,一共执行 25 步。
## 类比:JS 课程中的绳子两头烧
绳子两头烧,就是拿第二颗星星的过程:
```
var myLikeColorsList = ['blue','green','black','white'];
```
定义变量:`myLikeColorsList`
```
for (var i = 0;i < myLikeColorsList.length; i++){
console.log(myLikeColorsList[i]);
}
```
用一个变量直接输出,相当于分布执行**四种颜色**,需要运行四次。代码很简洁易懂,但是执行效率不够高。
```
for (var i = 0 ,j=myLikeColorsList.length - 1; i < myLikeColorsList.length / 2;i++,j--){
console.log(myLikeColorsList[i]);
console.log(myLikeColorsList[j]);
}
console.log('\n');
```
用两个变量直接输出,每次分别两个量,四个数字,只需要循环两遍,代码看起来冗长,但是执行效率更高啊!
### 思考题
> 给一个变量
>`name`='zhangwuji','zhoumin','xiexun','zhangsanfeng','huangrong','zhoubotong';
>
>你能使用 **三个变量** 以及 **for 语句** 实现 **只循环两次** 就能获得`name`的 json 代码吗?试一试吧!
## 游戏下载
> 游戏的价格为 30 元,**苹果手机**[^2]想玩的可以点击:[下载地址](https://itunes.apple.com/cn/app/human-resource-machine/id1005098334?mt=8)
[^2]: 如果你的手机是安卓手机,请自行搜索「 Human Resource Machine」或「人力资源公司」去下载。安卓的应用市场太多,而我没有安卓手机,不确定推荐的软件会不会恶意扣费。
-------
小超哥 2017 年 8 月 30 日
================================================
FILE: homework/lesson3/xiaoyi.md
================================================
## 第四课作业(无总结版)
### 1.关于命名
为了增强代码的可读性,在给变量进行命名的时候,要使得代码有意义。比如
var id = '1234567'; //这就不是一个好的命名方式,因为读代码的人会下意识的问:什么 id?
而 var nameId = '1234567'; // 这就是一个好的命名,因为一看就知道是名字的id,代码有意义,不仅别人容易看懂,自己在以后想改进的时候读起来也会更容易。
### 2.关于 switch 语句

我在刚开始看**switch**语句的时候有一点不明白,因为**if-else**语句很好理解,判断条件直接跟着要执行的代码,哪个正确就执行哪一个。
但是我在看 **switch**的时候有一点懵圈,看了一遍后终于明白了:
switch (age >= 18) {
case true:
console.log('已成年');
break; // 退出循环
case false:
console.log('未成年');
break; // 退出循环
default:
console.log('not a human');
}
它不像if-else语句 两个条件放到了两个大括号里面去,这里是放到一起的。其实上面的语句里面可能有三种输出。正如我在截图里面展示的一样。我在上面的代码里面把它认为的分成了三个部分,注意这三个部分是相互独立且排斥的。只可能有一种情况输出,比如 age>= 18,这个判断语句是正确的,那么程序就找 **case true** 找到了之后就执行它下面的那条语句,然后到了 break 就跳出switch语句。
注意:switch后面的条件正确,那么程序就去找 case true,如果不正确就去找 case false 或者 default。比如我把程序改成:
switch (age >= 18) {
case true:
console.log('未成年');
break; // 退出循环
case false:
console.log('已成年');
break; // 退出循环
default:
console.log('not a human');
}
现在来看,age>=18是正确的,那么就要找 case true,并执行后面的语句,输出 **未成年**。
### 3.两张交互图


================================================
FILE: homework/lesson3/xiongliyu.md
================================================
# 第三课作业


## 课堂笔记
### 命名方式
命名需要注意地方:
1. 完整代表了变量的含义吗? -> 推导出更多信息。
2. 以问题为导向了吗? -> 反映了问题而非解决方案。
3. 要what不要how:针对命名,说what更有效,比如不用 inputData而用 employeeData。
4. 驼峰命名法:第一个单词首字母小写,后面单词首字母大写。
>个人感觉:以后再多人协作共同完成一个项目的时候,这样的命名就会显得非常的重要了,我在写HTML的时候给标签的id和class命名的时候就很困惑,感觉不知道怎么命名,最命名也估计只有我能看得懂吧~ 现在我估计也可以用这样的方式来给变量、函数名和HTML标签里的id、class命名吧。
### 数据类型
之前只知道不同形式的数据,需要打包成不同的数据类型。
数据类型之间是尅转换的。
现在知道了:
数据类型决定了代码执行的效率。效率包括:`存储效率,计算效率,传递效率`
> 个人感受:如果想老师上节课说的:`程序的目的是:处理数据,给出结果`的话。那么了解数据有关的语法就很重要,而这些好像就是老师推荐的犀牛书里面的1~7章节的内容,方向都说的这么明白了,还学不好就是自己懒惰了。
> 不能懒!!之前看了1~5章节,打算今天把6~7章节先通读一遍。从第二遍开始就要主动思考带着问题去看了,边看边用电脑打代码!!加油
### 交互图
>个人感受:其实之前我不太明白为什么要画图,但是去做了之后,发现从网上查资料,变化边理清思路,最后画出来了,就算是错的,但是我自己画的内容在脑子里很清晰。
所以以后我遇到遇到搞不懂或理不清关系的时候,就记得可以画画图,把思路先理清楚。
### 其他
nodejs是一种**运行环境**,不是框架。
nodejs是运行环境,是基于v8引擎的JavaScript运行时。运行时是一种面向对象编程语言的运行环境。所以nodejs就是js的运行环境。只要我们输入相应的代码,它就会实时给我们一个反馈和结果,这样构成了一个完整的运行环境。
nodejs运行环境主要的内容(除了V8引擎)好像是:js标准库+nodeAPI
### 循环语句的三要素
* 1. 循环开始的初始化变量 var i = 0;
* 2. 循环条件 i < myLikeColorsList.length;
* 3. 计数器变量更新 i++;
>这三要素,应该就是我们学习的重点循环语句吧
>看完代码的感受:原来for循环还可以这样写~原来还可以从两头同时开始遍历~ 循环中嵌套循环好复杂~
>继续练习老师给出的代码。好好学犀牛书吧~
================================================
FILE: homework/lesson3/xugaoyang.md
================================================
首先想告诉同学们,由于作业量很大。而且前面给大家留的是作文(总结)形式的作业,我要一篇一篇去阅读,批改速度会很慢。我一定会读,发现问题时一定给出建议。倘若有遗漏,merge了你的作业但没有批复,请你主动提醒我一下。
所有的作业都不怕晚,只要在课程结束时间内发pr我就收。
重点是下面:)
【作业内容】
1. 阅读study/lesson3的两份代码。
2. 画出浏览器和服务器之间的交互图(不会?什么是交互图?完全没思路?那你肯定没上课或没看回放:))
3. (备选)如果你还想写课程总结?请继续,我很喜欢看你们的总结:),有总结必回。
【提交方式】
1. 请向getting-started-with-javascript项目发起pull request。
https://github.com/xugy0926/getting-started-with-javascript
2. 交互图格式:你名字命名的png图片。(如果还想继续写总结给我看?老规矩,你名字命名的md文件,和png图片一起发pr)
3. 提交homework/lesson3目录下。
================================================
FILE: homework/lesson3/yammy.md
================================================
## name style
变量的命名方式最好能完整反映出变量的含义(What),即让读代码的人一眼就明白what is it.
比如: `var cart = 1;`
这一段代码很难一眼就让人看明白这是什么意思,到底是指购物车 cart 数量,还是指某台购物车 cart ?
如果改成这样就一目了然了:`var cart_total_numbers = 1;`,很明显嘛,一看就明白,购物车数量总共是1个呗。
---
**小结:**
像 JS 这类解释性的语言,是人类友好型语言,虽然是代码,但人类读起来就像读英文一样,但这英语每个人写出来的却几乎完全不同,有的人写的清晰明了,有的人写的乱七八糟。
如果是一个人独自写代码还好,一旦需要协作,就会有人来读你的代码,你自己有时也会时不时的需要维护代码,写的不好的代码,尤其是变量定义的不好的代码,就会很难看懂,就会成为相互协作的阻碍。
## 浏览器和服务器之间的交互图

抱歉,图片可能不太清楚。
---
ps: 徐老师,我偷看了一眼 lesson4 的代码,其中 study/lesson4/type_array_sample.js 第23行代码:`myLikeColorsList.push();`这里调用的 push 方法貌似跟注释不太匹配呢,嘻嘻。
================================================
FILE: homework/lesson3/yanqingmu.md
================================================
# 从高维度理解代码基础知识
我自己不是第一次学习代码了,其实就是在不断的反复学习基础知识而已。结果常常是在还没有学好基础之前就放弃了。对此我经常很郁闷,感觉自己仅仅有一颗程序猿的心,却没有成为程序猿的命。而这节课的内容给了我很多的启发。
## 1.语法不是学出来的,而是用出来的。
这和李笑来老师在《人人都能用英语》里所表达的意思是一样的。程序的本质也是一种语言,那么它必然有自己的一套语法结构,这些语法跟英语语法一样的枯燥乏味。不知道这里有多少人还能分清楚时态、虚拟语态之类的语法概念?
但是这似乎并不妨碍我们去用英语。在不断的阅读英文材料的过程中,语法知识似乎就自然的习得了,因为过去需要靠语法知识分析才能理解的句子,如今读完就理解了。这真是一个神奇的过程。那么这个道理是不是在编程世界里也一样呢?
高阳老师给出了肯定的答案:**不被使用的代码,是垃圾代码;不被使用的变量,是垃圾变量**。
从这个角度出发,一个合格的程序猿一定是一个实用主义者。从变量的命名中,我们可以看到,代码的意义不仅仅是被自己所用,还要被他人所用。好的命名方式,可以让程序设计者之外的人也能读懂这个代码。
好比 ```var start``` 就不如 ```var startTime``` 更能准确的表达含义。当然注释信息也可以很好的帮我们更好的理解代码的含义。但是给每条代码都加上一个注释信息,似乎并不是一个明智的选择。所以好的变量名大大提升了代码「用」的效率。
关于循环语句也是一样的道理,无论是 ```if``` 语句还是 ```for``` 循环,在实际的运用中,我们都需要从它们的功能和使用场景。比如,```if else``` 语句更适合于二选一的情况,而 ```switch``` 语句更适合多选一的情况。虽然 ```if else``` 也可以后面再加一个 ```else``` 来实现多选一,虽然 ```switch``` 也可以仅仅使用两个 ```case``` 来实现二选一。
## 2.逻辑是可以从用的角度推导的
我们每天都在登录各种网站、页面和APP,但似乎从来没有想过它们是怎么实现的。当然作为普通用户来说,这并没有什么关系,但是对于致力于成为程序猿的我来说,思考这个问题就很有必要了。额,我又找到了一个之前学不好编程的原因了——这样的思考太少了。
通过对新大用户登录页面交互过程的推导,我终于搞懂了两个之前一直觉得很模糊的概念:**客户端**和**服务器端**。对于新大来说,我就是客户,那么我的个人电脑就可以称为客户端,而新大服务器为我提供了服务,满足了我的需求,所以叫服务器端。
在新大的主页上,当我点击「登录」按钮时,实际上我就发送了一个登录请求。显然这里我发送的对象是新大,那么必须由新大来对这个请求做出反应,此时新大的服务器端就登场了,它同意了我的登录请求,并给我返回了一个登录界面。这就完成了一次交互,也就完成了我跟新大的一次沟通,更直白点就是:我问一句,新大回复我一句。
然后,我输入登录信息并发送给新大,开始第二次的交互。然后新大服务器端做出判断,如果信息正确就返回给我后续的用户界面,如果信息错误就返回给我一个错误提示,如「用户名密码错误」。这样新大的服务器端就为我完成了第二次服务。以此类推。
这里也贴上本次的作业,请笑纳:

## 3.一点题外话
本来总结到此就应该结束了,但是本节课开头的那个女孩,给了我很多的触动。所以这里啰嗦一点题外话。我是一名机械工程师,大学学了7年机械,又工作了4年,得出的结论是「我不喜欢这行」,这确实很让人沮丧。
还依稀记得2013年,在完成论文等待答辩的间隙,我在网上报了个WordPress建站课程,目的是要做个淘宝客网站。几个月后,凭着所学的一点HTML、css基础,再加上几个模板,还真的把网站建立起来了,然后我注册了域名,还做了网站备案。后来发现,这网站离挣钱还早着呢,必须要学seo推广才可以。我还真的去学了,学「白帽」去写了一段时间的软文,虽然有了一点点流量却一直没有成交量,后来就没有后来了。
> 要不是现在又学编程,我是真的想不起那段经历的。
> 为什么又学编程呢?因为想转行去写代码吧,因为自以为喜欢代码吧。
> 那么我可以通过学习编程而转行吗?因为喜欢编程,所以就能做的更好吗?过去我的答案是肯定的。
但近半年来,随着在新大和得到平台的不断学习,我认识到「不喜欢这行」是个借口,是自己没有在本行业有所建树的借口。于是我又想起了毕业前导师的话:干一行爱一行。而我现在才有所领悟——痛的领悟:是先要干好一行,才能爱上这行。
> 所以我又重新思考了以上的问题。喜欢就能做的更好吗?
喜欢与否只是行动的原因之一,它不能保证结果。编程理论的枯燥程度并不亚于机械理论,反复「编程入门」的我对此深有体会。所以在编程的世界,我依然很可能会遇到跟现在一样的尴尬境地。
> 那么我要怎么做呢?
抛弃所谓转行的念头,至少是暂时抛弃。注意力应该放在具体的项目上,发现项目的乐趣,要给它赋予意义,然后全身心的投入进去,就像自己当年建站时做的一样。
编程和机械一样都是非常吃经验的,所以必须扎扎实实的积累经验。相信待积累几个成功的项目经验后,转行就只是顺势而为的事情。
编程和机械也是有区别的。编程的迭代速度更快,这就意味着在编程的世界里,要倒逼自己更快速的积累、更高速的成长,否则就要被淘汰。这也是我为什么想转行做程序猿的原因——追求成长,更高速的成长。
================================================
FILE: homework/lesson3/zhaoxiaoxin.md
================================================
作为小白,从JS的架构开始,我们也算头一波。感谢老师的指引,让我们建立起宏观的概念,形象化的认识。感谢老师,带领我们一路前行,打怪升级。
第三课的收获
1、学到了“命名后就要使用”的思想,学到了几种常用的语句,for switch等。
2、明确现在的重点任务就是,快速掌握JS的语言基础,练好基本功,后面才能不掉队。
3、了解了流程图的使用,明白了浏览器与服务器的交互流程。
做了作业才明白,为什么打开页面的时候,有时候会先出来页面的框架,后面才逐渐显示出图片。原来是因为,框架会在html中先传至浏览器,浏览器在解析的过程中发现缺少ass文件和js文件,然后再向服务器发出请求。
自己要注意,多做总结,多敲代码,加油。
关于如何命名,听了老师的课,知道了该如何去做。
跟着老师的课件,敲了两天代码以后,对此又有了新的认识。
这样做的根本目的是,为了方便阅读。
1、驼峰式的命名格式,是为了方便其他人阅读代码;
2、老师讲的两个命名要点,一是要有具体指向,可以从名字推导出更多的信息,另一点是,要明确what而不是how.这样做的目的,也是为了方面其他人阅读代码;
3、在写代码时,不同的内容之间,要用空白行隔开。
代码输出的内容,不同的内容之间,也要用分界线或者空白行间隔开。这样做的目的,也是为了方便别人阅读。
方便别人的同时,也方便了自己。
看见别人做的好以后,
一起学习,可以看到别人的作业。哈,上学的时候可没有这样的好处。
现在做完作业,看看其他人的,对比一下就可以看到差距。
之前流程图是用纸和笔画的。看了其他人的作业,有的是用软件,有的是用纸笔,但同样的纸和笔画图,可以看出每个人的用心程度。我的字太潦草了。
据说,看见别人能做到,就可以激活自己的镜像神经元。不知道是不是这样,反正我看完别的同学的作业,就自己重新打开画图软件,重新制作了一份。还加上了判断哈。
每天都有很多成长,每天都很充实。感谢老师。
================================================
FILE: homework/lesson3/第三次作业 交互图.md
================================================
##第三次作业 交互图
###上课笔记:
1、nodejs是JS的运行时
2、变量:定义变量,给变量赋值
3、命名:
>名字包含更多的信息
>要what不是how:var inputData & **var employeeData**
4、APP与服务器/浏览器与服务器之间的交互
>获取HTML文件
>解析HTML文件
>获取JS/CSS
>更新页面/执行JS代码
================================================
FILE: homework/lesson3/谢玉辉.md.md
================================================
看完了所有视频,然后回来这次作业,现在有了整体的概念。技术上的问题相信自己会很快熟练。
================================================
FILE: homework/lesson4/Jaykey.md
================================================
### 基础-第四课
记住什么?
#### 函数的构造和调用
> 原则:没有调用的参数和函数,都是流氓参数、流氓函数。
#### 从实际应用到代码
第一步是拆分过程,讲一个“大事件”拆分成若干的小事情,只找其中必要的部分来做。
第二步,完成各个小的单元,写出各个小部分的代码。
第三步,汇总,形成工作流,排序,调用对应函数。
PS:做好每个小单元的设计和封装,才能在调用的时候更加方便和高效。好的函数是能够多次调用的。
#### 使用VUE来构建动态数据
------
小结:使用VUE的过程中要赋予对应的id值。
更新个人JS学习博客:https://github.com/JayGJianGuo/js-study-record
================================================
FILE: homework/lesson4/Risexie.md
================================================
第四节课总结
===
### 最好的的时代
感谢老师为了照顾及学员进度而一再调节课程的内容,老师辛苦了。
说实话没有老师开设的这一门课程,我想我还是会去学习编程的,不管用什么方式。
曾经有人说过,这是一个最好的时代。在这个时代没有大型的战争,没有大型的冲突,我们可以生活得非常的安稳。同时互联网给我们提供了一个非常强大的外脑。
笑来老师说:
> english +互联网=Almost everything
我们几乎可以从互联网上找到我们想要的一切信息。如果同时利用好搜索功能,我们甚至可以把互联网当作我们的记忆库,这可以帮助我们突破大脑记忆的上限。
在接下来,我们的整个世界都会朝着电子化发展。越来越多生活设备被加入电脑芯片,被自动化,被电脑化。如果我们想要和这个世界更好的相处,想要在将来这个高度信息化,电脑化的世界体验更多的可能,掌握如何跟电脑相处,这是我们都逃不掉的命运。
尽管网上的资源是如此多,但是对于一个小白来说,面对如此多的信息,首先我们无法甄辨他们的质量。其次更是因为知识的繁杂,我们更多不知道从何下手,就光是安装编程的环境都让我们足够头疼。再加上编程其实是实现我们人类想法的工具。如果没有编程的思想,我们最终都只能成为写代码的机器,为了编码而编码,哪这件事情没有任何意义。,他们都跟企业有着保密协议,没有办法将我们人类思考的精华从企业带到我们这里。还好我们碰见了徐老师,愿意为了计算机教育,从大厂出来帮助我们这些小白,在这里再一次表示我的感激!
{{ message }}
授课老师:徐高阳
授课时间:20170808--20170914 每周二和周四晚上8:00--9:00
网页制作:安建才 20170910--23:00
二是把汇总到all_words.json文件中内容全选复制,赋值给index.html文件第56行中变量wordsList。完成以上操作,即可用点击index.html文件查看效果。 4、部署到github上。 新建一个库testwordsfromtheheart,生成一个地址https://github.com/jiancaian/testwordsfromtheheart.git,然后用终端cd words-from-the-heart,git clone 上述地址,此时在words-from-the-heart文件夹下生产一个testwordsfromtheheart文件夹,将通过上述1、2、3步在test文件下的内容全选并复制,粘贴至testwordsfromtheheart文件夹下。此时在终端依次执行git status, git add -A, git commit -m "the first html", git push origin master,完成从本地仓库上传至远程仓库。 接下来就是生产一个网页文件的地址,在testwordsfromtheheart仓库中点击setting,然后下来找到GitHub Pages 的 Source,选择master branch ,然后点击save保存,稍等片刻,GitHub就会给你生产一个网址,即https://github.com/jiancaian/testwordsfromtheheart,点击网址就能看到部署的网页。 总结:以上步骤基本都是抄的,只对其中的很小一部分进行修改,通过完成以上步骤,对建立网页 有了初步的认识。接下来就是优化网页,让网页好看一些。 在操作前心理一直畏惧,感觉好复杂啊,自己搞不定。实操一遍,觉得还可以,重点是思路要清晰,完成后幸福感满满。 【项目背景】 前期收集了同学们的心里话,我想把这些内容整理到一个页面上展示。 【技术要求】 1. 使用filejson这个库,把同学们的json文件汇总到一个json文件中。 2. 用vue实现一个html,把json文件的内容展示出来。 【提示】 1. 先扫出所有的文件名。 2. 过滤掉非json的名字,得出一个结果全部是json的文件名。 3. 利用jsonfile的方法循环读取内容到一个json的数组变量中。 4. 将内容写入到一个json文件中。 5. 把最终得到的json文件的内容反映到html上,请参考github_index/index.html 6. 修饰一下你的html效果。 7. 部署到你github项目的页面上。 我给出了一个homework_sample.js供你参考。为了不让你直接抄,我里面设置了2个bug,可能需要你调试才能找出bug。 ================================================ FILE: homework/lesson7/chenguoqiang.md ================================================ # 学编程一小步,人生一大步 参加了新生大学的编程入门课,最主要的原因就是便宜。之所以会想到学点编程,笑来老师建议每个人都要学点编程,想着学不下来也不会有很大损失。 课程总共有13节课,目前已经上完了12节课。前5节课并没有难度,都是一些基础的知识点,只要花些时间,不懂的地方多重复几遍。如果说有难度的话,没有接触编程的未知,会让你有恐惧感。你明明知道老师说的是中国话,就是不明白什么意思。仅仅过了十几天,回头看当时的课程内容,它们变得有点亲切。 出差的缘故,从第五节课开始,没有看直播课程,整个学习节奏就乱了,作业没能及时交。看课程回放,第一遍像是听天书,第二遍、第三遍··· ···,时不时的要拉回某个点再听一遍。作业并不是很顺利,就卡那里近一个小时动弹不得,你问老师,也没有发现问题,流程和命令都对,作业老师也会给出范本。就在你绝望的顶点,不经意的瞬间发现是命令拼写错了。 这个课程特色,老师不教编程语法,这些语法部分自学。直接做项目,做一个自己的网站。前面几节课的作业,都是为网站项目做铺垫。编程的知识,会用才算学到,学到了不会用,那就白白浪费了时间。网站的作业是第七课的作业,尽管之前有所铺垫,看着作业,不知道怎么下手,老师给预留了比较长的时候,利用这些时间又去看了前面课程内容,看完后依然不知道怎么下手。 有很多同学都提交了作业,心理更着急了,还是不知道从哪开始。偷偷观摩同学做好的作业,知道了老师设置的两个bug的位置,然后按照老师给的范例,顺利迈出了第一步。后面一切都按部就班,当看到自己网站建好的样子,很有成就感,完成了自己想都不敢想的事情。 一个月的编程学习的收获:碰到的问题并不需要都整明白,可以选择夸过去,项目先跑起来,而不是困在原地。就像写作,不能因为写不好而不写,正是因为写不好,所以才更要写。有些问题回头去看也许就不存在了。 人也需要盲目的自信,下辈子这个世界上就多了一个著名程序员。 网页地址:[https://chenguoqiang007.github.io/My-page/](https://chenguoqiang007.github.io/My-page/) ================================================ FILE: homework/lesson7/chenrushan.md ================================================ # homework lesson7 ## 仓库地址 [words-in-hearts](https://github.com/Rushan-Chen/words-in-hearts) ## 网页地址 [words-in-hearts](https://rushan-chen.github.io/words-in-hearts/) ================================================ FILE: homework/lesson7/chenyanxing.md ================================================ JavaScript编程入门_lesson7 网页地址: https://pingcha.github.io/words_collection/ 项目地址:https://github.com/pingcha/words_collection 碰到的问题 创建好项目,打开本地制作的网页,发现心里话这里没有显示出来:  回去重新对照老师教材的代码,花了一天去对照代码都没想明白是怎么回事,然后我点看本地页面的检查,发现这里说Vue没有定义  我重新认真的回去看了老师教材Vue的定义:https://github.com/xugy0926/getting-started-with-javascript/blob/master/study/lesson7/github_index/easy_vue.html 找到了问题的所在:  前面学习了如何引入第三方模块并执行后产生全局对象的js文件,没有写到html文件里面,所以报错‘没有引入vue模块’。所以事实上是我对如何引入第三方库的概念不清,还一直以为问题是出在引用的函数名上,参考同学的作业然后一直不停修改,也还是搞不明白。 未解决的问题: 1.导出数据到json文件里面,发现data挤在一堆,易读性差也不美观,还好有老师的提点:在vscode中,快捷键 alt + shift + F ,一键格式化代码。 2.对于某些函数片段的理解还不够,周末要多花点功夫研究。 3.教材代码: 把含有“json”字符的文件名过滤出来(需要一一判断—要用到循环语句for) var jsonFilesList = []; for (var i = 0; i < files.length; i++) { if (files[i].slice(-5) === '.json') { jsonFilesList.push(files[i]); } } try…catch捕获错误的方法,直接用了,还木有研究 for (var i = 0; i < jsonFilesList.length; i++) { // 同步读取文件如果发生错误,用try...catch捕获该错误 try { // 读取json文件内容(文件路径+文件名),并存在jsonList数组内 var contentJson = jsonfile.readFileSync(readDirPath + jsonFilesList[i]); jsonList.push(contentJson); } catch (err) { // 如果读取错误就把错误的文件名写入到errorFiles数组内 errorFiles.push(jsonFilesList[i]); } } 作业心得 1.看到同学作业做得又快又好,我要更加用心才行。 2.一碰到不懂,觉得难,在以前我是很容易放弃的,没有想到的是跟着老师的脚步一步步加深认识JavaScript后,越觉得是门很有趣的语言,作业因为之前搬家而耽误了一段时间,但是不会拖延着不做,反而做的时候挺带劲的,特别是做出来后,那种攻克后的小成就感,让心情特别好呢!虽然还做不到不借鉴同学作业独自想明白然后完成作业,不过,适时向高手请教,帮助你上手,才不至于死磕一个“难点”未果把耐心给磨没了,很可能会导致放弃。 ================================================ FILE: homework/lesson7/chenziwen.md ================================================ # 第七课作业——展示同学们的心里话 ## 项目地址 > https://github.com/WindBlewSails/myFirst-repository ## 心里话展示页面地址 > https://windblewsails.github.io/myFirst-repository/ ## 学习感受 这节课老师教了我们用Bootstrap来套用CSS表现,用VUE来展示数据,用JSONFILE第三方库来读取JSON文件内容。 完成这个作业用了我挺多时间的,先是解决老师设置的2个BUG,理清代码运行的过程。然后是搞清楚Bootstrap怎么套用,搞清楚VUE怎么把数据展现出来。最花时间而又没有成果的是想把头像和名字组合成一个正方形,心里话全部放到顶部的固定的位置,鼠标悬浮在哪位同学的头像上,顶部就会出现那位同学的心里话。或者是心里话就悬浮在头像的旁边。 But no Results。 CSS 和 VUE没有搞明白,只能按老师演示的完成了最基础的功能。 这又是眼高手低了呀。 ================================================ FILE: homework/lesson7/cloudyview.md ================================================ #Lesson 7 HomeWork ## [页面链接]( http://daijun.info/lesson7-homework/) ## [GITHUB项目网址](https://github.com/cloudyview/lesson7-homework) 通过调试徐老师的程序,完成了作业,CSS方面也自己尝试了BOOTSTRAP的强大力量,VUE初步体验,感觉很爽。 这次作业,我总感觉要是还要手动去吧JSON文件里面的数据COPY一次到HTML里面,太罗嗦,就尝试用三段HTML代码来组合成一个HTML文件。美其名曰:动态。 具体做法: 1. 首先将index.html拆成两部分,分别是开头和结尾。中间的数据部分就删除。 2. 然后在老师的例程基础上做修改和调试,先读入开头,然后用fs.writeFileSync()函数创建一个index.html.由于这个函数每次执行都会将内容清零,然后再写入,所以相当于每次执行都在创建index.html。 在写入的时候,用了同步函数,是发现如果用异步,会出现写入顺序错误的问题。暂时还不清楚具体原因。估计是因为JSON读写的那段,用了同步,那么系统会首先执行同步的那些代码,所以,虽然我创建Index.html的函数先执行,结果还是会后出。 3. 然后是JSON文件读取,写入的部分,就直接用fs.appendFile()函数来添加到index.hmtl的后面。 4、然后再后面再添加一段结尾的部分,至此,完成! 这个方法的好处是,我每次只需要执行我的JS文件,就能读取最新的“心里话”实现更新。 我考虑是否利用fs.Watch()函数,自动来监控。不过这样就需要做成后台自己运行的程序,或者要用web页面来发起请求,这些技巧目前都还不掌握,以后再考虑。 当前要解决的是乱码的问题,还在调试。功课先交,慢慢优化。 ## 学习心得 1. 只需要调用一次的函数,就直接在要用的地方执行。在CALLBACK的位置,实在是好方便的说。 2. 用括号的时候,必须成对打出,否则很容易就多了或者少了。即使是VSCODE帮你,也不要贪图这个方便,只打一边。为这个括号,花费了我超多时间来调试程序。 3. 同步与异步,还需要多多理解。 4. 编码的问题在中文世界里真的很重要,目前还有好多好多乱码在文件里,应该是读取的时候就出问题了,现在在考虑如何解决,学习中。 ================================================ FILE: homework/lesson7/cuiyuwei.md ================================================ 作业地址: 团队 https://fengkaiwater.github.io/Beijing-Olympics/ ================================================ FILE: homework/lesson7/dangfeipeng.md ================================================ https://dangfp.github.io/words_from_heart/index.html ================================================ FILE: homework/lesson7/dengxy0907.md ================================================ 第七课作业 ========== > 项目地址:https://dengxy0907.github.io/myFirstJavascriptProject/ > 项目仓库: https://github.com/dengxy0907/myFirstJavascriptProject 心得(更像我情绪的描述) --- > 因为自己生活中的意外和自己付出的时间不够多,导致课落下了,在急于完成作业的焦虑中一直在填自己给自己挖的坑。说实话,我这点小困难在其他同学面前不值一提 >虽然在敲代码时整体上很静,但是事实上还是有点着急的。我在哪里,我要什么,真的很重要,只有我脑子清楚了,代码才会跟着我走,而不是一心为了完成作业跟上进度而被代码带着思绪走 >这次依旧是最小可用品,之后再完善,感觉这个项目我可以像舍友反复打单机剧情一样反复啃了。 > 关于套路,我自己是很喜欢套路的,而去罗胖也说套路就是非正式的知识(大概是这个意思,原话忘记了),因为没有什么经历,所以只能拿游戏举例了,套路让我最快的了解了这个游戏且在我的套路里能打败实力高过我的玩家,但是我毫无进步,一直都是在舒适区里。 > 之前的php是真的不知道该做什么几乎停止了学习,加上忙于shadowsock的事情就把php放下了,然后就遇到了这门课,我真的挺幸运的。我的js学习也能开始了,我是电子商务专业,今年大三了,之前学校的课程真的很水,今年终于上了专业课了,真的,感觉大部分课程要做的就是这次js课的内容,这种感觉很棒。 ### 记录的错误汇总(因为屈指可数,就不分先后了) >先安装库,遇到问题,package.json包在test文件夹下,npm安装应该在test下安装 >vue找不到,搜索了很多,也安装了Vue.js devtools 。最后在才在检查中发现我把Vue打成了vue,当然找不到了。 >找不到jsonfile------>最后在微信聊天记录找到解决 npm install --save jsonfile ;不理解安装第三方库和插入第三方库有什么区别 >说jsonfile.writeFileSync 不是一个function;这两行我复制了其他同学的代码,但是代码是一样的,我的就不行,我也是英文输入法啊,不知道为什么,有空调试一下,是不是我哪里用了中文的输入法或者是其他原因 !(问题图)[https://ws2.sinaimg.cn/large/006tKfTcgy1fji1y2p22hj31b018ggvp.jpg] > 哇,这里不知道又发生了什么,界面最左边出了一条绿线,然后这个图就。。。 ### 成功汇总文件时想说的话 > 1、到这里的心里话,在我这次重新再来的时候收到了老师的回信,感谢老师对我们的付出 > 2、确实之前有点着急,除了一眼看出的扫描文件处的错误之外就没有注意其他的了,过于着急想打通流程,完全违背了初衷 > 3、直到晚上的课才隐约明白为什么pr“没有”成功了,是不是因为现在的pr要老师看完才算成功 > 4、之所以我觉得是不是pr出错是因为太久没有同步fork了,然后是先git到自己的git上才同步fork,git调用了我的编辑器让我说明为什么这次同步是必要的 > 5、强行关闭会提示打断git vi的运行,之后在的重新fork后,因为好奇,又同步了一次,出现了同样的界面(刚fork就同步fork) > 6、因为我看pr里依旧是显示这个pr可以通过的(大致意思),所以就没有去注意 > 7、至于编程,虽然一直出错,但是我没有厌烦过,只是着急于课程落下了,不知道具体的应该去哪里找,敲代码时,我整个人都宁静了,很舒服,感觉每时每刻都在心流中 > 8、今晚的课上完我才知道我的php课不只是学了一点代码,我的php老师也让我完成了大半的入门,虽然是垫底的二本,但是很幸运遇到了这么多好老师 ================================================ FILE: homework/lesson7/diaozhicong.md ================================================ #第七次课作业 ## 【网页部署】 https://sam-tiao.github.io/Diaozhicong/ 【作业地址】 https://github.com/Sam-Tiao/Diaozhicong ## 学到的关键知识点: 1.用后端jsonFile第三方库的方法读取众多文档写入一个Json文档; 2.初次用前端vue库的锚点方法将后端数据引入前端。 思考点: 本次作业,不知能否实现汇总的Json文档地址直接在前端vue的引用中实现直接挂钩(而不用拷贝进文档中),后面Json有更新,web端直接更新? 如果能实现,该如何实现?需要那方面的知识? ================================================ FILE: homework/lesson7/fangqingyang.md ================================================ ### 静态页面地址 ### https://vfongv.github.io/LetMeTry/ ### 项目地址 ### https://github.com/vFONGv/LetMeTry ### 要解决的问题 * 网页加载太慢 * 页面排版,巨幕的背景图片,页面的背景图片 ### 体会 1 走路的时候,总能想到点东西。 2 看文档是必须的。 3 抄,抄完后要看得明白。 4 重复敲代码是必须的。 ================================================ FILE: homework/lesson7/fengkai.md ================================================ 1.编程方法论 a. 声明 -> 变量 定义 -> 内存 赋值 -> 变量 b. 顺序 选择(分支) if ... 循环 for 、while ... c. 封装; 调用服务,使用黑箱进行快速学习,适用初阶、中阶; d. 编程世界里有一种机制,把不相关或低相关度的两件或者多件事产生联系; e. 模仿是最好的初级训练 f. 对于编程语言的理解方法:把一句话拆成若干个单词,拿每个单词去执行,然后组合起来,整句话也就理解了;机器语言也是语言。 下断点 / console.log g. 在项目中成长 h. 编程的过程就是把数据传来传去 i. 减法比加法好 j. 好的程序员 = [写文档, 项目管理, PPT, 简洁的代码, ... ] 2. 作业地址: 个人 https://fengkaiwater.github.io/myPage/indexHeart.html 团队 https://fengkaiwater.github.io/Beijing-Olympics/ ================================================ FILE: homework/lesson7/guowei.md ================================================ # JS小白入门不放弃 homework_lesson7 ### 提交作业 项目地址:https://github.com/Wei02320/words_collection 网站地址:https://wei02320.github.io/words_collection/ ## 反思 ### 学习最怕的不是不懂,而是傲慢。 这几天不管是在看回放还是做作业上都有些懈怠,反思一下:作业难度增加,完成没之前那么顺利,正向反馈减低,花时间变得更少,更难完成,走进死循环。一看日期,明天便是最后一节课,想起第一次课的JS小白不放弃里所说,放下傲慢。拿起键盘就是干! ### 作业要点和难点 * 使用filejson这个库,把同学们的json文件汇总到一个json文件中。 * 用vue实现一个html,把json文件的内容展示出来。 ### 思路 其实老师在作业里都有留下sample,我们需要对代码进行修改和调试,大大地降低了难度。做的时候我也在想,不参考代码我能不能写出来。 **不过,不花时间还想一步登天,做梦呢!** 1.在github上新建一个项目:words_collection 2.先使用filejson这个库,安装package.json,引入第三方库。在这里犯了一个大错误,将*npm install*输成*npm install package.json*,以致于下一步一直报错。好在英俊潇洒的徐老师及时指出错误,并丢过来一个问题: >为什么*npm install package.json*也可以执行? *npm install*可以命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。而package.json文件本质上是一个对象,*npm install package.json*相当于单独安装package.json,所以报错? 3.把同学们的json文件汇总到一个json文件中。代码偷懒参考老师的sample: 需要注意的是,有三处需要修改哦! ``` var pathString = '../words-from-the-heart/'; ``` ``` var jsonFiles = []; for (var i = 0; i < files.length; i++) { if (files[i].includes('.md')) { jsonFiles.push(files[i]); } } ``` ``` var jsonList = []; var errorFiles = []; for (var i = 0; i < jsonFiles.length; i++) { try { // 读取json文件 var content = jsonfile.readFileSync(pathString + jsonFiles[i]); jsonList.push(jsonFiles[i]); } catch (err) { // 如果读取错误就把错误的文件名写入到errorFiles数组内 errorFiles.push(jsonFiles[i]); } } ``` 请开动脑筋找出来! 4.之后便是用vue实现一个html,然后把读取的json数据展示到网页上。新建index.html文件,copy徐老师的index.html(下一步想加一些新的东西玩玩,装修一下网页),并复制粘贴包含style.css和vue.min.js的public文件夹。 5.部署到自己的github项目的页面上。 *大功告成!明天结课前我要完成第9课,不多写了,看回放去了!* ================================================ FILE: homework/lesson7/hanwei.md ================================================ ### 主页网址 https://freedomsky11.github.io/JScouser-homework-7/ ### 代码网址 https://github.com/freedomsky11/JScouser-homework-7 ================================================ FILE: homework/lesson7/hewei.md ================================================ # 第七课作业 ## 团队概况 - 何伟:[https://github.com/Dream4ever/](https://github.com/Dream4ever/) - 王颖:[https://github.com/MaggieWong27/](https://github.com/MaggieWong27/) - 王沙沙:[https://github.com/shashawang](https://github.com/shashawang/) - 谢泓升:[https://github.com/Risexie/](https://github.com/Risexie/) ## 作业地址 - 仓库地址:[https://github.com/Dream4ever/JavaScript](https://github.com/Dream4ever/JavaScript/) - 网页地址:[https://dream4ever.github.io/JavaScript/lesson7.html](https://dream4ever.github.io/JavaScript/lesson7.html) ## 整体思路 最开始是想做一个里程碑式的效果,来展示大家的心里话,就是类似下图的这种效果。  但是在后面做网页的过程中,发现大家的心里话字数不一致,想要做出来预期中的效果,就要对原来的设计方案进行更改。而且工作和生活上的事情也不少,没有足够的时间来做出自己希望中的效果,只好作罢。 作业的基本内容倒是完成了,但是离自己期望中的样子还差很远,还要付出更多的努力才行。看着身边的同学一个个进步神速,自己心里那个焦虑啊。 下面就来讲讲本次作业的整体流程和遇到的问题。 ### 一、后台读取 `json` 文件内容 后台读取各个 `json` 文件内容的基本流程如下: > 1. 先用 `fs.existPath()` 检查保存心里话的文件夹路径是否正确,正确则继续,否则就中止程序。 > 1. 接着用 `fs.readdir()` 读取文件夹中的所有文件及文件夹至 `files` 这个数组中。 > 1. 在读取完成之后,只保留其中的 `json` 文件,删除所有扩展名不是 `json` 的文件以及所有文件夹。并且将 `files` 数组中的每个元素,由原来只是保存 `json` 文件名,改为保存各 `json` 文件的完整路径。 > 1. 用同步读取的方式 - `fs.readdirSync()` - 将每个 `json` 文件的内容读取至 `fileContent` 数组中,并将读取失败的文件名保存至 `errorFiles` 数组中。 > 1. 最后,将成功读取到的所有 `json` 文件的内容保存到 `content.json` 文件中,并将所有读取失败的文件名保存至 `error.json` 文件中。 ### 二、前台读取 `json` 内容 前台读取 `json` 文件内容的方法很简单,因为用的都是现成的库的功能,所以几行代码就搞定了,也没遇到什么问题。 > 1. 在第一阶段,已经把大家的心里话都保存到了 `content.json` 文件中,然后在终端中将该文件上传至 GitHub 的仓库里:[content.json](https://raw.githubusercontent.com/Dream4ever/JavaScript/master/public/lesson7/content.json)。这样就可以用 `ajax` 请求来获取仓库上的内容,从而开始最基本的前后端交互。 > 1. 在 `main.js` 文件中,采用 `ajax` 请求来获取上面的 `content.json` 文件的内容。如果读取成功,则用 `JSON.parse(data)` 来解析返回的数据,并将解析后的数据与 `Vue` 实例 `vm` 中的数据项 `words` 进行绑定。这样,就可以在前端页面中使用读取到的内容了。 ### 三、浏览器页面渲染数据 在获取到数据之后,就要开始对数据的渲染了。因为有了 `Vue` 这个强大的前端框架,以前很多需要用 `jQuery` 来手动操作的部分,现在都不需要考虑了,只要把主要精力集中在页面样式和业务逻辑上就可以了。说一下在做这个简单页面过程中的几个关键点。 > 1. 如何让大家的心里话依次在左边和右边进行展示?这里当然要用数组,将下标为偶数的元素 0、2、4…… 在左侧显示,将下标为奇数的元素 1、3、5…… 在右侧显示。那么如何能够获取到数组的下标呢?这就需要稍微深挖一下 `Vue` 中的 `v-for` 这个指令了。`v-for` 这个指令的第二个参数用来表示当前项的索引,这刚好就是我们所需要的。在前端页面中,用 `v-for="(word, key) in words"` 这条指令,来获取每一个元素 `word` 及其索引 `key`。这样就可以根据每个元素的索引值,来决定是让它在左边显示还是在右边显示了。 > 1. 在获取到元素及其索引之后,就需要为左侧和右侧的元素分别设置不同的样式了。经过一番研究,发现可以用 `Vue` 中的条件渲染来实现这个需求:对于索引分别为偶数和奇数的元素,利用 `Vue` 中的条件渲染这个功能,用 `v-if="key % 2 == 0"` 这个条件进行判断,然后分别用 `` 元素进行包装,这样就方便我们为不同的元素设置不同的样式了。 > 1. 接下来,就可以用 Bootstrap 的栅格系统来实现基础的布局,结合 `col-md-X` 和 `col-md-offset-X`,便可让元素在指定的位置显示了。 ### 存在问题 虽然页面的基本效果做出来了,但是在这个过程中,发现了两点问题。 > 将屏幕分辨率设置为 `1280 x 800` 时,通过 Bootstrap 的栅格系统设置的样式发生了错位(见下方第一张图)。一方面,可以从图片的位置看出来,奇数行最右侧图片的右边缘,与偶数行最左侧图片的左边缘已经交叉了。而将分辨率设置为 `1440 x 900` 时,这种现象就消失了。另一方面还可以看到,偶数行的文字,全都跑到了下一行,似乎是因为偶数行最左侧的图片占据了过多的宽度。  ↑发生错位的情况  ↑正常显示的情况 下面就尝试着分析一下问题的原因: 在 `1280 x 800` 分辨率下,对于每一行来说,不包括边距的宽度为 `1168.8px`,那么其一半的宽度就是 `584.4px`。 奇数行的文本占据 5 列,含边距的总宽度为 `456.984 + 30 = 486.984px`。 奇数行的图片占据 1 列,宽度为 `style.css` 中指定的 `100px`。 这样奇数行左侧的内容占据的总宽度就为:`486.984 + 100 = 586.984px`,这个宽度已经超过父元素的半宽 `584.4px` 了。 再来看偶数行。 偶数行图片左侧的 `col-md-offset-6` 占据的宽度为 `584.391px`,这个宽度没有超过父元素的半宽,说明 Bootstrap 本身的栅格系统是没问题的。 偶数行的图片占据 1 列,宽度为 `style.css` 中指定的 `100px`。 这样偶数行图片右侧的位置为 `584.391 + 100 = 684.391px`。这个宽度是否超过了 Bootstrap 栅格系统 7 列的宽度呢?我们来计算一下 7 列的宽度:`1168.8 / 12 * 7 = 681.8px`,这个宽度是小于偶数行图片右侧的距离的。 经过上面的计算,问题的根源已经找出来了:在 `style.css` 中设置图片的尺寸为 `100px * 100px`,而之前显示器的分辨率设置为 `1440 x 900`,这个时候,`100px` 的宽度不会超过 Bootstrap 栅格系统一列的宽度,所以当时没有看出来问题。而这次把显示器分辨率调低之后,`100px` 这个宽度已经超过了 Bootstrap 栅格系统中一列的宽度了,所以出现了错位问题。既然这样,就不能用 `px` 来指定图片的尺寸了,用 `bootstrap responsive image max size` 作为关键字进行 Google,发现应当设置图片的 `max-height` 属性的值为 `100%`,这样不管怎样更改分辨率,都不会出现错位的问题了。 但是在查看页面的时候,发现对于 `img` 地址错误的元素,其高度坍缩成 0 了。而当初正是为了让这样的元素也能占据和普通图片元素相同的宽高,才设置的 `px` 值。这样一来,虽然解决了新问题,但是老问题又回来了,哈哈,真是辛辛苦苦三十年,一夜回到解放前呐。 嗯,这个问题先记录下来,后面再慢慢解决吧,作业都布置了一个多星期了,还没交上呢,焦虑啊! 参考资料: [Constraining image height with bootstrap responsive image?](https://stackoverflow.com/a/21859493/2667665) ================================================ FILE: homework/lesson7/hitchhacker.md ================================================ # hitchhacker-homework7 --- ## 队伍:志翀小分队 ## 提取JSON文件的代码 ``` // 引入fs模块 var fs = require('fs'); // 引入file json库 var jsonfile = require('jsonfile'); // 定义要扫描的目标文件夹 var pathString = './words-from-the-heart/'; // 文件全地址 var fileString // 获取文件列表 var files = fs.readdirSync(pathString); // 用于存放所有心里话 var writePathString = './all_words.json'; // 用于存放格式不正确的json文件名 var errorPathString = './error_data.json'; //得到jsonFiles var jsonFiles = []; for (var i = 0; i < files.length; i++) { if (files[i].includes('.json')) { jsonFiles.push(files[i]); } } //console.log(jsonFiles); //循环读取json文件的内容,并都存在jsonList数组内。读取出错的文件名存在errorFiles数组内。 var jsonList = []; var errorFiles = []; var content=new Array(); // 文件读取 for (var i=0;i