美文网首页
{JS 函数}

{JS 函数}

作者: jrg_memo | 来源:发表于2016-12-01 17:29 被阅读12次

    声明&表达式

    • 格式

    函数声明
    function print(s) {
    console.log(s);
    }
    函数表达式
    var print = function(s) {
    console.log(s);
    };

    • 调用

    函数声明 作用域内调用
    函数表达式 只在声明后调用

    • 提升

    函数声明整个函数代码块提升至作用域最顶部
    函数表达式 只提升 被声明的变量,不提升函数

    • 分号

    函数声明 可加可不加
    函数表达式 必须加分号来表示结束

    声明前置

    • 变量

    因为JS引擎的工作方式是先解析代码获取所有被声明的变量,然后逐行运行。
    所以所有的变量的声明语句都会被提升到代码顶部

    • 函数

    因为JS引擎 将函数名视同变量名,所以
    采用function命令声明函数时,整个函数被提升到代码头部
    采用赋值语句声明函数时,函数在原位置被声明。

    arguments

    • arguments是一个对象。这个对象只有在函数体内部,才可以使用。
    • 由于JS允许函数有不定数目的参数,所以我们需要一种机制,可以在函数体内部读取所有参数。
    • arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数,arguments[1]就是第二个参数,以此类推。

    重载

    • 定义

    允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数必须不同

    • 作用

    解决功能类似处理的数据类型不同的问题。

    • 实现

    在JavaScript中没有函数重载的概念,函数通过名字确定唯一性,参数不同也被认为是相同的函数,后面的覆盖前面的,但是可以用arguments模拟函数重载
    function foo() {
    if(arguments.length == 1) {
    alert(arguments[0] + 1);
    } else if(arguments.length == 2) {
    alert(arguments[0] + 2);
    }
    }
    foo(1); //输出 “2”
    foo(2, 3); //输出 “4”

    立即执行函数表达式

    • 语法
      (function sum(i){   })( );
      (function sum(i){   }( ));
      var a= function sum(i){   }( );
      
    • 定义

    一种声明之后就立即进行该函数执行操作的函数
    声明一个匿名函数并立刻调用

    • 作用

    1 不必为函数命名,避免了污染全局变量;
    2 函数内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量。
    Tip 通常只对匿名函数使用

    作用域链

    • 作用域是指 变量存在的范围
      由于变量分为全局变量和局部变量,作用域相应分为全局作用域和局部作用域
    • 作用域链是指 子对象在找不到相关变量时,会一级一级地向上寻找所有父对象的变量 的这种行为

    相关文章

      网友评论

          本文标题:{JS 函数}

          本文链接:https://www.haomeiwen.com/subject/rygbuttx.html