zoukankan      html  css  js  c++  java
  • Eloquent JavaScript #03# functions

    1、作者反复用的side effect

    side effect就是对世界造成的改变,例如说打印某些东西到屏幕,或者以某种方式改变机器的内部状态从而影响到后面的语句。

    造成side effect的例子,例如下面的makeNoise 函数:

    const makeNoise = function() {
      console.log("Pling!");
    };
    
    makeNoise();
    // → Pling!

    没有造成side effect的语句:

    1;
    !false;

    2、关于return

    不论是不写还是 返回空return; 结果都是返回undefined

    3、let VS. var

    如果用let和const,那么变量的作用域和java等语言没有什么不同(局部可见性、同名屏蔽全局变量)。

    但是倘若使用var ,那么在括号里定义的变量在括号外也可见:

            <script type="text/javascript">
                let x = 10;
                if (true) {
                    let y = 20;
                      var z = 30;
                      console.log(x + y + z);
                  // → 60
                }
                // y 在这里是不可见的 
                // 强行使用 ReferenceError: y is not defined
                console.log(x + z);
                // → 40
            </script>

     引用知乎张正诚

    使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;
    使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;
    使用const声明的是常量,在后面出现的代码中不能再修改该常量的值。

    PS. 在2015年之前的JavaScript中,只有函数创建了新的scope。

    4、定义函数的几种方式

    ① 传统方式  ---- let/const f = function(xxxxx) 

    函数本身也是一种值,具备其它值的特征:

    const future = function() {
      return "You'll never have flying cars";
    };

    注意在 } 之后需要分号。

    ‘② 自动变成当前scope(在某个{} 内或者全局)有效,无视定义函数的位置

    console.log("The future says:", future());
    
    function future() {
      return "You'll never have flying cars";
    }

    ③ 省事的写法 ...

    const power = (base, exponent) => {
      let result = 1;
      for (let count = 0; count < exponent; count++) {
        result *= base;
      }
      return result;
    };
    
    const square1 = (x) => { return x * x; };
    const square2 = x => x * x;
    
    const horn = () => {
      console.log("Toot");
    };
    
    let h = a => a % 3;

    5、more...

    经典递归

    返回函数的函数

    调用函数缺少参数自动补为null

    6、Exercises

    计算字符数:

    const countBs = function(x) {
        let count = 0;
        for (let i = 0; i != x.length; ++i) {
            if (x[i] == 'B') count++;        
        }
        return count;
    };
    
    const countChar = (a, b) => {
        let count = 0;
        for (let i = 0; i != a.length; ++i) {
            if (a[i] == b) count++;
        }
        return count;
    }
    
    console.log(countBs("BBC"));
    
    console.log(countChar("kakkerlak", "k"));
  • 相关阅读:
    C++ 课程设计——电梯调度系统
    PAT 1006 Sign In and Sign Out 查找元素
    PAT 1005 Spell It Right 字符串处理
    C++ 词汇表
    四六级分数竟是这样算出来的!交白卷都不会得零分 (转)
    以太坊智能合约部署
    如何设计一个通证经济体系?(转载)
    以太坊上那些暴力“利”的应用(转载)
    geth搭建以太坊私链及常用操作
    ubuntu18.04 安装 QQ
  • 原文地址:https://www.cnblogs.com/xkxf/p/9109960.html
Copyright © 2011-2022 走看看