原文:http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-04-01/287.html

< 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。

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. Subset leetcode java

    题目: Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset mus ...

  2. js常用函数(不断添加中。。。)

    /************************************************* Function: getColor Description: 根据输入的数字返回一个颜色值 In ...

  3. Java基于Servlet 验证吗

    req.setCharacterEncoding("utf-8");        resp.setContentType("text/html;charset=utf- ...

  4. Memcache+Cookie解决分布式系统共享登录状态------------------------------Why Memcached?

    每个用户请求向IIS发送一个请求,但IIS服务器的请求数有限,cpu支持的线程数有限,如果一秒钟向这台服务器发送10000次,那么则一般就会有问题,考虑集群, 请求数据分流,几台服务器共同对应一个公共 ...

  5. 为Windows 7添加“Internet打印”功能

    http://wangchunhai.blog.51cto.com/225186/1156589/

  6. SQLServer与Oracle的数据同步(触发器trigger)

    说到同步,其实是靠"作业"定时调度存储过程来操作数据,增,删,改,全在里面,结合触发器,游标来实现,关于作业调度,使用了5秒运行一次来实行"秒级作业",这样基本 ...

  7. Webform——Repeater多表联合显示

    对于一个表里,通过外键连接如何显示另一个表的数据,前Winform里可以用封装类来实现. 对于Webform,可以用封装类,也可以用Repeater的ItemDataBound事件(//在项被绑定数据 ...

  8. HDU 5317 RGCDQ

    题意:f(i)表示i的质因子个数,给l和r,问在这一区间内f(i)之间任意两个数最大的最大公倍数是多少. 解法:先用筛法筛素数,在这个过程中计算f(i),因为f(i)不会超过7,所以用一个二维数组统计 ...

  9. 【转】ubuntu 编码 UTF-8 GBK GB18030

    添加编码支持 sudo locale-gen zh_CN.GBK sudo locale-gen zh_CN.GB2312 sudo locale-gen zh_CN.GB18030 2.更新一下lo ...

  10. sonar之安装篇

    sonar 是一个很好的质量度量平台,安装方式有很多种.下面我教大家使用j2ee 容器的方式安装,我们使用tomcat 1.准备: 1.1 环境redhat linux1.2 下载sonar 从htt ...