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


    1.函数声明

    函数声明以function关键字开头,接着是必须的函数(变量)名和以逗号分隔的可选的参数列表,再接着就是以大括号封装的函数体。函数声明必须是一个单独的JavaScript语句。

    2.函数表达式

    在任何情况下都是其它JavaScript语句的一部分(比如赋值表达式等号的右侧、函数的参数)的函数被称为函数表达式。

    3.比较

    //函数声明
    function myFunctionDeclaration(){ function innerFunction() {} } //以下为函数表达式
    var myFunc = function(){}; myFunc(function(){ return function(){}; }); (function namedFunctionExpression () { })(); +function(){}(); -function(){}(); !function(){}(); ~function(){}();

    myFunctionDeclaration 是一个包含其它函数声明(innerFunction)的函数声明

    函数表达式总是其它JavaScript语句的一部分,比如变量声明等号的右侧:

    var myFunc = function(){};

    或者其他函数的参数:

      myFunc(function() {

       return function(){};

    }); 
    或者立即执行函数:

    (function namedFunctionExpression () { })();

    或者被为运算符修饰:

     +function(){}();

    函数声明与函数表达式除了以代码放的位置不同区别,还有一点不同,那就是函数声明必须有函数名,而函数表达式的函数名可以省略。

    函数声明必须有函数名是因为函数被调用的基本要求,在调用一个函数时我们必须能够引用它,而唯一的方法就是通过函数名。

    函数表达式是其它JavaScript语句的一部分,所以我们有别的方式引用它们,比如函数被赋值给一个变量,可以通过变量名来访问:

    var doNothing = function(){};
    doNothing();

    或者作为其它函数的参数,可以通过参数名访问:
    function doSomething(action) {
      action();
    } 
    关于立即执行函数:
    立即执行函数必须用括号包裹,原因很简单,JavaScript解析器需要区分函数声明和函数表达式,如果省略函数外边的括号,并且直接调用( function(){}(2)此处函数外面没有括号),
    JavaScript解析器开始解析,并且结束执行,因为这条语句是以function关键字开始,被当作函数声明,由于函数声明必须要有函数名,因此会抛出异常。函数外边的括号会给JavaScript解析器这是一个函数表达式的信号。为了达到相同的目的,也可以这样写:
    (function (a){}(3)),括号的作用和上面相同。
    位运算符的作用和上面也是相同的。


     
  • 相关阅读:
    Spring MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/Saints/p/5991186.html
Copyright © 2020-2023  润新知