3.2、函数
<script>
//        普通函数
      function func() {
            alert("Hello Shuaige")
        }
//        定义一个可传参数的函数
      function func(arg) {
            alert(arg)
        }
      func(‘Superman‘)
//        自执行函数,顾名思义,定义好之后可以自动执行
      (function f3(arg) {alert(arg)})("Shuaige is good man");
//        匿名函数,用处不是很大 了解就行
      var a = function() {
            alert(‘meinv‘);
            };
      a();
</script>
注意: 对于JavaScript中函数参数,实际参数 的个数可能 小于形式参数的个数,函数内的特殊值arguments中封装了所有实际参数。
2、作用域
JavaScript中每个函数都有自己的作用域,当出现函数嵌套时,就出现了作用域链。当内层函数使用变量时,会根据作用域链从内到外一层层的循环,如果不存在,则异常。
切记:所有的作用域在创建函数且未执行时候就已经存在。
 代码展示: 
function f2(){
            var arg= [11,22];
            function f3(){
                console.log(arg);
            }
            arg = [44,55];
            return f3;
        }
        ret = f2();
        ret();
注:声明提前,在JavaScript引擎“预编译”时进行。
3、闭包
    「闭包」,是指拥有多个变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
闭包是个函数,而它「记住了周围发生了什么」。表现为 由「一个函数」体中定义了「另个函数」。
由于作用域链只能从内向外找,默认外部无法获取函数内部变量。闭包,在外部获取函数内部的变量。
function f2(){
    var arg= [11,22];
    function f3(){
        return arg;
    }
    return f3;
}
 
ret = f2();
ret();
    
</script>