zoukankan      html  css  js  c++  java
  • JavaScript一道面试题求y的值是? z 的值是? s的值是?

    原文: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。

  • 相关阅读:
    mentohust 使用
    查找 GPU 计算能力
    在写代码过程中遇到的问题,以及当时的解决方法(如实记录)
    ubuntu14.04 解决屏幕亮度无法调节的问题
    Ubuntu14.04下安装 boost (boost_1.54 最简单的方法)
    在 Ubuntu下安装 labelImg (标数据用)
    在树莓派上配置MariaDB
    使用Telegraf + Influxdb + Grafana 监控SQLserver服务器的运行状况
    如何读懂SQL Server的事务日志
    ActiveMQ安装使用与spring整合配置教程
  • 原文地址:https://www.cnblogs.com/jiangtuzi/p/3896741.html
Copyright © 2011-2022 走看看