继续做用域的问题,今天上午看了一会,下午看又看到了一个类型的题,函数名和变量名相同的问题。以前还不会以为函数名和变量名重名了会有什么冲突。也是没有去测试过。。懒了。直接贴代码:函数
运行以后你们猜想结果是多少?一口气:100!!我果真是好大的口气,没有思考直接给出答案,实在是不太好的习惯。测试
出乎意料的报错了,有点一头雾水的感受。可是一步一步的去分析的话,仍是能够明白为何会是这个答案。blog
首先这道题须要和JS的预编译阶段挂钩了,也就是在执行代码以前,须要准备的上下文环境;在预编译阶段要准备须要使用到的变量、函数等资源。资源
变量和变量表达式在预编译阶段获得的是声明,而没有赋值,获得undefined;作用域
声明式函数在预编译阶段获得的是赋值,没错,就是直接赋值。编译
而且准备资源的顺序是有前后的,先预编译 参数 > 函数 > 变量;变量
那么这道题能够解析为:im
这个时候就能够很好的理解为何 a() 这个结果是报错说a不是一个function了,人家原本就已经不是function了,已经从新定义赋值为值类型了,固然要报错咯。img