zoukankan      html  css  js  c++  java
  • 函数声明与函数表达式

    1.什么是函数声明,函数表达式

    函数声明:function 函数名(){}

    函数表达式:function 函数名(){}。函数名可写可不写。写出来的,就是命名函数表达式,不写的就是匿名函数表达式

    例子:

    function aaa(){};这就是函数声明

    var a=function aaa(){};命名函数表达式

    var a=function(){};匿名函数表达式

    下面的都是函数表达式

    (function aaa(){}) 

    ~function aaa(){}
    -function aaa(){}
    +function aaa(){}
    !function aaa(){}

    2.区别

    (1)函数表达式可以直接后面加括号执行,而函数声明是不可以的。

    function aaa(){alert(1);}();//函数声明不可以,结果有错误
    
    var a=function aaa(){alert(1);}();//函数表达式可以,结果弹出1

    ~
    function aaa(){alert(1);}();//函数表达式可以,结果也弹出1
    
    

    (2)函数声明可以被提前解析出来

    如下面的例子:在火狐浏览器中弹出的是1,但是在IE浏览器中弹出的是2,但是函数表达式就不存在这样的问题了。所以在这种情况下要用函数表达式。

    if(true){
        function aaa(){
            alert(1);
        }
    }
    else{    
        function aaa(){
            alert(2);
        }
    }
    
    aaa();

    利用函数表达式:

    if(true){
        var a = function aaa(){
            alert(1);
        }
    }
    else{    
        var a = function aaa(){
            alert(2);
        }
    }
    
    a();//用aaa();可以吗?no!

    这时候弹出的都是1.

    那么问题来了,为啥不可以用aaa();因为这个aaa()在外面调用的话,是找不到的,但是在内部是可以找到的。

    对于函数表达式,不要用;

    var a=function aaa(){
        alert(1);
        alert(typeof aaa);
    }
    aaa();

    结果显示

    var a = function aaa(){
        alert(1);
        alert(typeof aaa);  //内部是可以找到的
    }
    
    a();
    
    /*aaa();  //外面是找不到的*/

     总结:

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

    答案:在Javscript中,解析器在向执行环境中加载数据时,对函数声明和函数表达式并非是一视同仁的,解析器会率先读取函数声明并使其在执行任何代码之前可用(可以访问),至于函数表达式,则必须等到解析器执行到它所在的代码行,才会真正被解析执行。(函数声明提升

  • 相关阅读:
    快速掌握一个语言最常用的50%[转]
    技术路线的选择重要但不具有决定性 [转]
    图形、图像国外期刊 [转]
    SessionHelper.cs(20170223)
    PageHelper.cs(20170223)
    FileDown.cs(20170223)
    EncryptionHelper.cs(20170223)
    CookieHelper.cs(20170223)
    ConvertJson.cs(20170223)
    ConvertHex.cs(20170223)
  • 原文地址:https://www.cnblogs.com/GumpYan/p/5699664.html
Copyright © 2011-2022 走看看