下午一个全局eval()代码段执行的问题暴露出了一个技术人员该有的哪些素质?
首先我问犀牛书84页中代码段执行为何node中执行出现y is not defined,开始大家为我解答问题:
1,大师姐说我在浏览器环境下是可以执行出来结果的,
2,于鑫开始对问题产生兴趣,在stack overflow中找到同样的这个问题,并且有解决方案,

原文链接:https://stackoverflow.com/questions/24522719/node-js-global-eval-throwing-referenceerror
3,遇到问题如果不是书写错误,就换一个环境去执行一遍试下,
4,问题还没有解决就问百度或者google,或者直接在CSDN和stack overflow中找答案,这个时候敢看英语解答就很重要,在英文解答中,知识点是浏览器中,顶层作用域就是全局作用域,在node中顶层作用域不同于全局作用域,声明something在node模块中将会是那个模块中的局部变量,
5,这个时候我看了老师给的文章解释文章中给的第二种方法就是把
var y = global;改成y = global,就可以了,因为JavaScript解析器在处理代码时,会询问当前作用域是否声明了变量b,如果当前作用域内没有声明,就继续问外层的作用域是否声明了,如果达到顶层作用域还没有声明,就会在顶层作用域中帮忙声明一个。因为在例子中,在函数内作用域中 y声明了,但是在函数外部y并没有声明此时会在函数外层作用域(即顶层作用域)声明一个。这样y就变成了一个全局变量。
文章链接:http://xugaoyang.com/post/5a6eaeb6b8faab30b38fc9cb
6,在陈扬帆的解释中疏导全局变量和局部变量是不一样的东西,各自分配了内存,局部变量执行完后被销毁,不被销毁的情况存在与闭包的情况,这牵扯到两个问题:1,分配内存是个什么概念,2,闭包是个什么情况
7,英文解决方案第一个方案中说道node REPL是node的命令交互模式,也就是直接运行js代码,而不是通过.js运行代码,这个需要了解下node运行.js文件的过程,现在我的感觉是模块作用域,全局作用域和局部作用域等这些作用域链的问题
8,https://zhanglun.github.io/2014/04/28/%E8%AF%91-node-js%E7%9A%84%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F/
这个篇文章解释了node中创建全局变量的两种方法不是非常理解
明天继续补充!
其他总结
1,答案给出了还要知道为什么答案是这样的,为什么这样解决就可以了,他后面的原理是什么?
2,一直要保持一个谦虚认真的态度去学习、总结
3,对于一个不理解的问题就把人家给的答案中所有不明白的地方全部记下来一点点的查漏补缺,js作为一门语言,它的基础知识总量也就那么多,你今天多搞会一点,明天就少一点,积少成多自然就厉害了
4,要有琢磨的精神
总结起来就是态度:谦虚、认真,方法:先自己解决然后再问,让懒这个词汇去死吧,学习使我快乐。
网友评论