Js | 立即执行函数function(){}()

679 阅读1分钟

函数声明与函数表达式区别

    setFn(); //函数声明成功
    function setFn(){
        console.log("函数声明成功");
    }

    setfun(); //报错:Uncaught TypeError: setfun is not a function
    var setfun = function(){
        console.log("函数表达式成功");
    }

函数表达式可直接在函数后加括号调用

    var Obj2 = function(){
        console.log("这属于马上执行");
    }() //这属于马上执行
    
    
    //虽然匿名函数属于函数表达式,但未进行赋值,所以javascript解析时将开头的function当做函数声明,故报错提示需要函数名
    // function(){

    // }()

!!! var setFn = function() {}()可以理解为在匿名函数前加了 = 运算符后,将函数声明转化为函数表达式,所以拿!,+,-,()...等运算符来测试下是否如此

    !function(){
        console.log("!这个运算符是可以的");
    }() //!这个运算符是可以的

    +function(){
        console.log("+这个也是可以的");
    }() //+这个也是可以的

    -function(){
        console.log("-这个当然也可以");
    }() //-这个当然也可以

    ~function(){
        console.log("哇!~这个也可以");
    }() //哇!~这个也可以
    
    (function(){
    console.log(4)
    })() //报错:TypeError: (intermediate value)(...) is not a function
    
    {
        (function () {
            console.log("我是需要在一个区域内才能运行")
        })() //我是需要在一个区域内才能运行
    }