IIFE imediately-invoked-function-expression,立即执行函数
    由两部分组成
    1、圆括号运算符中的函数表达式,有独立的作用域
    2、圆括号调用函数
    两种书写方式
    (function(){}()) 有无名称都不重要,自动忽略
    面试题

    1. var a = 10;
    2. if( function b () {} ){
    3. a += typeof(b)
    4. }
    5. console.log(a) => '10undefined'

    作用:1、外界访问不了内部变量
    2、避免污染全局变量(匿名,执行后立即销毁)
    传参方式,在后面括号中传参

    1. (function(a, b){
    2. console.log(a + b)
    3. })(3, 4)

    3、立即执行函数执行后,会立即销毁。
    var a = (function(){})()
    console.log(a) => undefined
    保存立即执行函数运行结果,可以用一个变量来接受

    1. var a = (function(a=1,b= 5){
    2. return a + b
    3. }) => 6

    4、什么时候可以立即执行函数? => 函数表达式( ()括起来的就是表达式 )后面可以直接调用,如:
    (function(){})()
    函数声明后面不能直接调用
    将函数声明转换为表达式的方法: 加 + 、-、!、 || 、&&

    1. 1 && function fn(){ console.log(123) }() => 123
    2. function test(){}(6) //=> 这样不会报错,不会调用函数,因为js把括号里面的参数看成表达式
    3. function test(){}() //=> 这样会报错

    重点面试题:

    1. function fn () {
    2. var arr = [ ];
    3. for(var i = 0; i < 10; i++){
    4. arr[i] = function(){
    5. console.log(i)
    6. }
    7. }
    8. return arr
    9. }
    10. var myArr = fn()
    11. for (var i = 0; i < myArr.length;i ++){
    12. myArr[i]()
    13. } //=> 10个10; 此时myArr中每个函数引用着fn的AO,AO中的i现在为10;所以打印10个10;

    (1)怎么打印0-9,利用立即执行函数

    1. function fn (){
    2. for(var i = 0;i<10;i++){
    3. (function(){
    4. console.log(i)
    5. })()
    6. }
    7. }

    (2)给函数传参,打印每个函数自身的AO属性

    1. function fn () {
    2. var arr = [ ];
    3. for(var i = 0; i < 10; i++){
    4. arr[i] = function(num){
    5. console.log(num)
    6. }
    7. }
    8. return arr
    9. }
    10. var myArr = fn()
    11. for (var i = 0; i < myArr.length;i ++){
    12. myArr[i](i) //给函数传参,打印每个函数自身的AO属性
    13. }
    1. (3) 利用立即执行函数,用立即执行函数包裹
    1. function fn () {
    2. var arr = [ ];
    3. for(var i = 0; i < 10; i++){
    4. (function(num){
    5. console.log(num)
    6. arr[i] = function(){console.log(num)}
    7. }
    8. )(i)
    9. }
    10. return arr
    11. }
    12. var myArr = fn()
    13. for (var i = 0; i < myArr.length;i ++){
    14. myArr[i]()
    15. }
    16. //利用立即执行函数,创造一个单独的作用域。

    逗号运算符l,返回逗号后面元素
    var a = (123 , []) => []