1. 原文:http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-04-01/287.html
  2.  
  3. < script type = "text/javascript" >
  4. var x = 1;
  5. var y = 0;
  6. var z = 0;
  7. function add(n) {
  8. n = n + 1;
  9. }
  10. y = add(x);
  11. function add(n) {
  12. n = n + 3;
  13. }
  14. z = add(x);
  15. s = y + z;
  16. < /script>

求: y的值是? z 的值是? s的值是?

我相信,肯定有同学会答错,当然,不是说他们不会,而是他们可能太大意了!

我们首先看function add,两个add都没有返回值,而我们知道,没有明确返回值的,全部返回undefined,所以,y和z都会是undefined,那么s自然也就不会是一个数字了,没错,s应该是NaN

假如我们将题目改一下呢?如下:

  1. < script type = "text/javascript" >
  2. var x = 1;
  3. var y = 0;
  4. var z = 0;
  5. function add(n) {
  6. return n = n + 1;
  7. }
  8. y = add(x);
  9. function add(n) {
  10. return n = n + 3;
  11. }
  12. z = add(x);
  13. s = y + z; < /script>

两个function add都有返回值了,那么,y,z,s会是多少呢?

不错,y和z都是4,s是8,为什么y不是2而是4呢?因为在javascript中,直接通过function申明的函数,后面定义的,会影响到之前的引用,如下:

  1. < script type = "text/javascript" >
  2. function x() {
  3. alert(2)
  4. };
  5. x(); //output 3
  6. function x() {
  7. alert(3)
  8. };
  9. x(); //output 3
  10. < /script>

如果是通过var来申明的函数会是什么情况呢?我们看看:

  1. < script type = "text/javascript" >
  2. var x = function() {
  3. alert(0)
  4. };
  5. x(); //output 0
  6. var x = function() {
  7. alert(1)
  8. };
  9. x(); //output 1
  10. x(); //output 1
  11. < /script>

通过var申明的函数,后面定义的并不会影响前面的引用。

如果两种模式混合,又会是什么情况呢?

  1. < script type = "text/javascript" >
  2. function x() {
  3. alert(2)
  4. };
  5. x(); //output 3
  6. var x = function() {
  7. alert(0)
  8. };
  9. x(); //output 0
  10. var x = function() {
  11. alert(1)
  12. };
  13. x(); //output 1
  14. function x() {
  15. alert(3)
  16. };
  17. x(); //output 1
  18. < /script>

结果是这样的,你猜到了吗?

通过function定义的函数,后面定义的,照旧影响了前面的引用,但是不能改变通过var申明函数后的引用,反而,通过var申明的函数,改变了后来通过function申明函数之后的引用。

所以,如果:

  1. < script type = "text/javascript" >
  2. var x = function() {
  3. alert(1)
  4. };
  5. x();
  6. function x() {
  7. alert(3)
  8. };
  9. x();
  10. < /script>

后面的x()出来的也会是1。

JavaScript一道面试题求y的值是? z 的值是? s的值是?的更多相关文章

  1. Javascript一道面试题

    实现一个函数,运算结果可以满足如下预期结果: add(1)(2) // 3add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15 function add () ...

  2. C语言atan2()函数:求y/x的反正切值

    头文件:#include <math.h> atan2() 函数用于求 y / x 的反正切值.其原型为:    double atan2(double y, double x); [参数 ...

  3. 透过一道面试题来探探JavaScript中执行上下文和变量对象的底

    在做面试题之前,我们先搞清楚两个概念 执行上下文(execution context) 变量对象(variable object) 执行上下文 我们都知道JavaScript的作用域一共分三种 全局作 ...

  4. 一道笔试题来理顺Java中的值传递和引用传递

      题目如下: private static void change(StringBuffer str11, StringBuffer str12) { str12 = str11; str11 = ...

  5. 通过一道笔试题浅谈javascript中的promise对象

    因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...

  6. JavaScript函数内部修改全局变量的问题【一道面试题】

    JavaScript函数内部修改全局变量的问题 今天 10:44梵天莲华 | 浏览 23 次  Javascript编程语言函数 修改标签 代码如下,为什么加了 function a(){};这个函数 ...

  7. 【C#基础知识】静态构造函数,来源于一道面试题的理解

    看到园友的一道面试题,很好奇,测试了一下结果. public class A { public static int X=B.Y ; public A() { ++X; } } public clas ...

  8. (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

    背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...

  9. x为正变数,求y=x^3/(x^4+4)的最大值

    设z=1/y=x4+4/x3 显然,当z有最小值时,y有最大值,求得zmin,就得到了ymax 而z=x+4/x3=x/3+x/3+x/3+4/x3 根据正实数算术平均数大于等于它们的几何平均数的定理 ...

随机推荐

  1. 命令格式 kill -3 pid

    命令格式 kill -3 pid 作用 打印进程号为pid的进程中,每个线程的执行日志 到 nohup文件 中,如果nohup的输出做了重定向,那么输出到重定向以后的文件中. 命令格式 top -Hp ...

  2. Power Station POJ 4045

    题意:给你一棵树,让你求一点,使该点到其余各点的距离之和最小.如果这样的点有多个,则按升序依次输出. 树型dp #include <cstdio> #include <cstring ...

  3. Git教程之分支管理之二

    分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息.如果要强制禁用Fast forward模式,Git就会在merge时生成一个 ...

  4. Git教程之分支管理之一

    分支在实际中有什么用呢? 你创建了一个属于你自己的分支,别人看不到,别人还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又 ...

  5. NPOI的测试代码

    NPOI\testcases\main\testcases vs10.csproj 需要注意,重新引用一下NPOI类库 需要注意的是,测试项目,使用了NUnit 找到测试项目下的SS文件夹,再定位到U ...

  6. 8 Things Every Person Should Do Before 8 A.M.

    https://medium.com/@benjaminhardy/8-things-every-person-should-do-before-8-a-m-cc0233e15c8d 1. Get A ...

  7. MySQL open table

    背景:    MySQL经常会遇到Too many open files,MySQL上的open_files_limit和OS层面上设置的open file limit有什么关系? 源码中也会看到不同 ...

  8. 关于SqlParameter中IN子句查询的问题

    今天调试到方法中代码: String hotelCodes =”’’,’’,’’”; string sqltext ="select * from HotelMedalInfo where ...

  9. 8.11-8.16:usaco

    summary:57 bzoj1741:裸二分图最大匹配 #include<cstdio> #include<cstring> #include<iostream> ...

  10. BZOJ_1031_[JSOI2007]_字符串加密_(后缀数组)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1031 长度为n的字符串形成环,枚举开头位置,得到n个长度为n的串,将这些串排序,然后按照顺序输 ...