js面试题
2012-04-20 13:53
225 查看
题目如下: <script type="text/javascript"> var x = 1; var y = 0; var z = 0; function add(n){n=n+1;} y = add(x); function add(n){n=n+3;} z = add(x); s=y+z; </script> 求: y的值是? z 的值是? s的值是? 我相信,肯定有同学会答错,当然,不是说他们不会,而是他们可能太大意了! 我们首先看function add,两个add都没有返回值,而我们知道,没有明确返回值的,全部返回undefined,所以,y和z都会是undefined,那么s自然也就不会是一个数字了,没错,s应该是NaN。 假如我们将题目改一下呢?如下: <script type="text/javascript"> var x = 1; var y = 0; var z = 0; function add(n){return n=n+1;} y = add(x); function add(n){return n=n+3;} z = add(x); s=y+z; </script> 两个function add都有返回值了,那么,y,z,s会是多少呢? 不错,y和z都是4,s是8,为什么y不是2而是4呢?因为在javascript中,直接通过function申明的函数,后面定义的,会影响到之前的引用,如下: <script type="text/javascript"> function x(){alert(2)}; x();//output 3 function x(){alert(3)}; x();//output 3 </script> 如果是通过var来申明的函数会是什么情况呢?我们看看: <script type="text/javascript"> var x = function(){alert(0)}; x();//output 0 var x=function(){alert(1)}; x();//output 1 x();//output 1 </script> 通过var申明的函数,后面定义的并不会影响前面的引用。 如果两种模式混合,又会是什么情况呢? <script type="text/javascript"> function x(){alert(2)}; x();//output 3 var x = function(){alert(0)}; x();//output 0 var x=function(){alert(1)}; x();//output 1 function x(){alert(3)}; x();//output 1 </script> 结果是这样的,你猜到了吗? 通过function定义的函数,后面定义的,照旧影响了前面的引用,但是不能改变通过var申明函数后的引用,反而,通过var申明的函数,改变了后来通过function申明函数之后的引用。 所以,如果: <script type="text/javascript"> var x=function(){alert(1)}; x(); function x(){alert(3)}; x(); </script> 后面的x()出来的也会是1。 转自: http://www.v-ec.com/dh20156/article.asp?id=143 —————————————————————————————————— 这些跟各浏览器的实现有关。
相关文章推荐
- js面试题
- JS判断两个对象内容是否相等的方法示例及开发面试题汇总(图)
- [js] 非常好的面试题,学习了。。
- 10个常见的Node.js面试题
- JS面试题集锦
- 一道面试题引发的对 JS 类型转换的思考
- 解析js面试题(上)
- JS面试题及答案
- 网易JS面试题与Javascript词法作用域说明
- js面试题(一)
- 大部分人都会做错的经典JS闭包面试题
- 前端JS面试题汇总 Part 1(事件委托/this关键字/原型链/AMD与CommonJS/自执行函数)
- 10个常见的Node.js面试题
- 最全的js面试题
- 【JS每日练习】阿里巴巴web前端开发面试题
- Node.js面试题
- 网易JS面试题与Javascript词法作用域说明
- HTML+CSS+JS面试题
- 详解JS中的this、apply、call、bind(经典面试题)
- 大部分人都会做错的经典JS闭包面试题