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"));
原文地址:https://www.cnblogs.com/xkxf/p/9109960.html