一道前端面试题,关于函数声明和函数表达式
2013-04-11 00:25
495 查看
题目如下(这也是我上篇随笔中的代码):
当时我的第一反应就是2013,这不很EASY么(以前高中做数学题,一些答案总会是些该年年份)!
得知答案不对时,脑子第一反应居然是函数无重载!!!3333,幸亏没说这个答案,不然对面肯定2333 了==!
后来将这个代码亲自试了一下,答案是3011!!!
后来,就自己思考了一下,首先解析器会优先解析函数声明,这样的话,第一个函数很明显会被第四个覆盖,那第一个数字是3就不奇怪了~~然后到了代码的执行阶段,变量式就会顺序执行显示0,1。但是为什么最后一个结果依然是1呢?然后我就尝试修改了这段代码:
答案会是什么呢?是1,1!!
还是因为对函数声明优先解析的原因,解析器在执行前优先解析声明式,但是执行过程中会再解析变量式,所以这个时候变量式就会覆盖声明式(只有同名函数适用)!查看一下代码:
答案输出是1,现在你明白了吧~~
<script type="text/javascript" > function x(){ alert(2); } x(); var x=function(){ alert(0); }; x(); var x=function(){ alert(1); }; x(); function x(){ alert(3); } x(); </script>
当时我的第一反应就是2013,这不很EASY么(以前高中做数学题,一些答案总会是些该年年份)!
得知答案不对时,脑子第一反应居然是函数无重载!!!3333,幸亏没说这个答案,不然对面肯定2333 了==!
后来将这个代码亲自试了一下,答案是3011!!!
后来,就自己思考了一下,首先解析器会优先解析函数声明,这样的话,第一个函数很明显会被第四个覆盖,那第一个数字是3就不奇怪了~~然后到了代码的执行阶段,变量式就会顺序执行显示0,1。但是为什么最后一个结果依然是1呢?然后我就尝试修改了这段代码:
/*function x(){ alert(2); } x(); var x=function(){ alert(0); }; x();*/ var x=function(){ alert(1); }; x(); function x(){ alert(3); } x();
答案会是什么呢?是1,1!!
还是因为对函数声明优先解析的原因,解析器在执行前优先解析声明式,但是执行过程中会再解析变量式,所以这个时候变量式就会覆盖声明式(只有同名函数适用)!查看一下代码:
var x=function(){ alert(1); }; function x(){ alert(2); } x();
答案输出是1,现在你明白了吧~~
相关文章推荐
- 关于函数声明表达式的一道题目
- 一到关于js函数的前端面试题引发的血案
- 关于正则表达式的一道面试题
- 一道关于函数声明与对象定义的笔试题
- 关于正则表达式的一道面试题
- 一个讨论引发关于js中函数声明,函数表达式,形参与变量声明赋值引发的一些事
- 关于setTimeout()的延时执行,JavaScript的异步、匿名函数、函数声明、函数表达式
- 一道关于https进行登录验证的前端面试题
- 一个讨论引发关于js中函数声明,函数表达式,形参与变量声明赋值引发的一些事(http://www.cnblogs.com/zhouyongtao/archive/2012/11/22/2783089)
- 一道sql 关于pivot的面试题
- js中函数声明与函数表达式
- 一道关于计算机如何做加法的面试题
- 函数表达式 和函数声明
- 一道关于给DIV按比例分配宽度的面试题
- JavaScript函数声明和函数表达式
- 进程控制学习笔记(续)-- 关于fork的一道面试题
- 2016/3/18 ①PHP基础 ② PHP函数 ③其他函数(随机数、关于日期) ④正则表达式 ⑤字符串处理
- 关于随机数的一道面试题
- 函数声明的两种方式:函数声明和函数表达式