zoukankan      html  css  js  c++  java
  • js中的函数

    【函数的声明及调用】

    基础知识
     1、函数声明的格式:
    function 函数名(参数1,参数2,....){
    //函数体
    return 结果;
    }
    >>>函数调用的格式:
    直接调用:函数名(参数1的值,参数2的值,...)
    事件调用:事件名=函数名();
    2、函数声明的几点强调:
    ① 函数名的声明,必须符合小驼峰法则(首字母小写,之后每个单词首字母大写);
    ② 参数列表,可以有参数,可以无参数。分别称为有参函数,无参函数;
    ③ 声明函数时的参数列表,称为“形参列表”(变量的名);
    调用函数时的参数列表,称为“实参列表”(变量的值);
    函数中,实际有效的参数取决于实参的赋值,未被赋值的形参,将为Undefined;
    ④ 函数如果需要返回值,可用return返回结果。
    调用函数时,使用var 变量名=函数名();的方式,接收返回结果;
    如果没有返回值,则接收的结果为Undefined;
    ⑤ 函数中变量的作用域:
    在函数中,使用var声明的变量,默认为函数的局部变量,只在函数内容能用;
    不用var声明的变量,默认为全局变量(函数的全局变量必须在函数调用后才能使用);
    函数的形参列表,为函数局部变量,只在函数内部能用;
    ⑥ 函数声明与函数调用没有先后之分,即调用语句可写在声明语句之前;

    function func1(){
    console.log("调用无参函数");
    }

    function func2(num1,num2,num3){
    var num=num1;
    console.log("调用有参函数");
    console.log("num为:"+num);
    console.log("参数一为:"+num1);
    console.log("参数二为:"+num2);
    console.log("参数三为:"+num3);
    }

    var num = func2(1,2,3);

    【匿名函数的调用
    1、声明一个匿名函数,直接赋给某个事件
     window.onload=function(){}
     2、使用函数表达式,声明匿名函数;
     声明函数表达式:var func = function(){}
     调用函数表达式:func();
     >>>使用匿名函数表达式,则调用语句,必须在声明语句之后,
     否则报错(对比常规函数声明与调用区别);
     3、使用自执行函数声明并直接调用匿名函数;
     ① !function(参数一){}(参数一的值 ); //使用任意运算符开头,一般使用!
     ② (function(){}());//使用()将匿名函数及之后的括号包裹
     ③ (function(){})();//使用()只包裹匿名函数表达式
     三种写法的特点:
     ① 结构清晰,开头加!结尾加().不容易乱,推荐使用
     ② 可以表明匿名函数与之后的()为一个整体,推荐使用
     ③ 无法表明函数与之后的()为一个整体,不推荐使用

    window.onload=function(){
    console.log("使用window.onload调用匿名事件");
    }

    var func3 = function(){
    console.log("使用函数表达式,调用匿名事件");
    }


    /*

    [函数内部的作用对象]
    Arguments对象
    1、作用:用于保存调用函数时,所赋值的实参列表。
    >>>>当我们调用函数,并使用实参赋值时,实际上参数已经保存到Arguments数组中。即使没有形参
    ,也可以使用Arguments[n]的形式调用参数。
    2、 Arguments数组的个数取决于实参列表与形参无关(顺序从0开始);
    但当第n个位置的形参,实参,Arguments都存在时形参与Arguments是同步的,
    (既在函数中修改其中一个的值,另一个会同步变化);
    3、Arguments.callee是Arguments的重要属性,用于返回Arguments所在函数的引用。
    Arguments.callee() 可以调用自身函数执行。
    在函数内部调用函数自身的写法被称为递归,所以Arguments.callee()是递归调用时常用的方式;

    this
    指向函数调用语句所在的作用域,即谁调用函数,this指向谁;

    console.log(num)
    var num = 10;
    funcN()
    function funcN(){}

    [JS中代码执行顺序]
    JS中代码运行,会先进行检查、装载,即声明变量、函数等操作;
    然后在进入执行阶段,(变量的赋值等属于执行阶段)。

    所以,函数的声明属于检查装载阶段,函数的调用属于执行阶段。so,函数调用语句写在哈数声明语句之前,并没有任何关系。

    所以,上述代码,执行流入
    -------检查装载阶段-------
    var num; //声明变量
    function func() // 声明函数
    -------检查装载阶段-------
    console.log(num) ;
    num = 10 ;
    funcN(); //执行函数的{}中的代码

    案例

    1、用函数编写一个四则运算器


    function calc(fu){
    num1=parseFloat(prompt("请输入一个数字"));
    num2=parseFloat(prompt("请再输入一个数字"));
    switch (fu){
    case "+" :
    console.log(num1+num2);
    break;
    case "-" :
    console.log(num1-num2);
    break;
    case "*" :
    console.log(num1*num2);
    break;
    break;
    case "/" :
    console.log(num1/num2);
    break;
    default:
    console.log("输入有误");
    break;
    }
    }


    </script>
    </head>
    <body>
    <button onclick="calc('+')">+</button>
    <button onclick="calc('-')">-</button>
    <button onclick="calc('*')">*</button>
    <button onclick="calc('/')">/</button>
    </body

    2、通过递归计算1+2+3+4+...+10

    var sum=0;
    !function getsum(num){
    sum+=num;
    num++;

    if (num<=10) {
    arguments.callee(num);
    }

    }(1);

    console.log(sum);

    3、 /*1!+2!+...+10!=?*/

    var sum=0;jie =1;
    !function getsum(num){
    /*var jie =1;
    !function(num1){
    jie *=num1;
    num1++;
    if (num1<=num) {
    arguments.callee(num1);
    }
    }(1);*/
    jie *=num;
    sum+=jie;
    num++;
    if (num<=10) {
    arguments.callee(num);
    }
    }(1);

    console.log(sum);

  • 相关阅读:
    JSON操作技巧
    我的前端学习历程(转)
    sql指南网址
    using 和try/catch区别和注意点
    【转】StringBuffer的用法与string的区别
    【转】比较page、request、session、application的使用范围
    【转】StringBuilder用法
    【转】.Net高级技术——IDisposable
    【转】.NET快速查找某个类所在的命名空间
    【转】VS2010安装包制作
  • 原文地址:https://www.cnblogs.com/lixishimeng/p/6680386.html
Copyright © 2011-2022 走看看