function(){}()如何工作?

这个问题在这里已经有了答案:

  • 该功能之前感叹号做了什么? 9个答案

  • 什么!

    当你使用! 该函数成为一元(逻辑)NOT运算符的单个操作数。

    这迫使函数被评估为一个表达式,这可以立即以内联方式调用它。


    其他选择

    你可以用几乎所有的操作员来做到这一点。 这里有些例子...

    'invoke',function(){ /*code*/ }();
    1+function(){ /*code*/ }();
    void function(){ /*code*/ }();
    ~function(){ /*code*/ }();
    +function(){ /*code*/ }();
    

    关于其中一些的好处是运营商的意义不会超载。


    ()的问题

    当你在函数中使用() ,你可以点击一些错误,如果你在一行中有多个分号,而没有用分号分隔它们,那么会出现一些错误。

    (function() {
        alert('first');
    }())
    
    
    (function() {
        alert('second');
    }())
    
    // TypeError: undefined is not a function
    

    这将导致TypeError ,因为围绕第二个函数的outer ()将被解释为打算调用一个函数。 第一个不会返回一个函数,所以你试图调用undefined


    如何使用不同的操作员来应对(或避免)问题

    即使像+这样的运算符在某种程度上超载也不会导致错误。

    如果你这样做......

    +function() {
        alert('first');
    }()
    
    +function() {
        alert('second');
    }()
    

    第一个+被解释为一元+运算符,并且它转换从第一个函数返回的结果,在这种情况下,这个结果是undefined因此它被转换为NaN

    第二个+将被解释为加法运算符,因此会尝试将NaN添加到第二个函数的返回结果中,这里又是undefined

    当然结果是NaN ,但它是无害的。 没有非法代码可以引发错误。


    演示操作员如何与功能交互

    为了证明这一点,只需给每个函数一个返回值,然后将其粘贴到控制台中...

    +function() {
        alert('first');
        return "10";
    }()
    
    +function() {
        alert('second');
        return 20;
    }()
    
    // 30
    

    您将得到两个alert ,然后控制台将显示30因为第一个+运算符将字符串"10"转换为数字10 ,第二个+将两个结果相加。


    ! 是一种普通的逻辑否定。
    ()执行该功能。

    链接地址: http://www.djcxy.com/p/17419.html

    上一篇: How exactly does !function(){}() work?

    下一篇: Javascript anonymous function call