js函数

  • 第一种是使用function语句定义函数

    function abc(){

      alert('abc');
    

    }

  • 第二种是在表达式中定义函数

    var 函数名 = function(参数1,参数2,…){函数体};

首先谈一下声明式:

//像声明变量一样,将通过function(){}标识符创建的匿名函数直接赋值给变量,以该变量作为调用函数名称
  var a = function () {
  alert("a");
} 
  a();
  var a = function () {
  alert("aa");
} 
  a();

  他们是没有带具体名称的函数,其结果是:a,aa....

再是定义式:

    //以function关键字后跟函数名称及(){}来直接定义命名函数
  function b() {
  alert("b");
} 
  b();
  function b() {
  alert("bg");
} 
  b();

  他们都有自己的函数名称,其执行结果就不一样了。 他们的结果是:bg、bg.这里的执行结果有些人就不清楚了,为什么会这样呢?

这就要从JavaScript解释引擎机制上说了! 在采用定义式创建同名函数时,后创建的函数会覆盖先创建的函数。这种差别是由于JavaScript解释引擎的工作机制所导致的。JavaScript解释引擎在执行任何函数调用之前,首先会在全局作用域中注册以定义式创建的函数,然后再依次执行函数调用。由于注册函数时,后定义的函数重写了先定义的函数,因此无论调用语句位于何处,执行的都是后定义的函数。

对于声明式创建的函数,JavaScript解释引擎会像对待任何声明的变量一样,等到执行调用该变量的代码时才会对变量求值。由于JavaScript代码是从上到下顺序执行的,因此当执行第一个example()调用时,example函数的代码就是首先定义代码;而当执行第二个example()调用时,example函数的代码又变成了后来定义的代码。

例如:

//定义

    var add = function(a,b){

        return a+b;

    }

    //调用函数

    document.write(add(50,20));
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>函数的定义</title>
</head>
<body>
    <button onclick=demo1()>function函数</button>
    <button onclick=a()>匿名函数</button>
    <script>

        // 使用关键字function定义函数
        //         优先级最高 在任何位置都可以调用
        function demo1(){
            console.log('函数被调用了');
        }

        // 在表达式中定义函数
        //         只能在函数定义之后调用
        var a=function(){
            console.log('匿名函数');
        }

        // 调用函数
        // demo1();
        // a();
    </script>
</body>
</html>

arguments

在函数代码中,使用特殊对象 arguments,开发者 无需明确指出参数名,就能访问它们。

关于变量和参数问题:
函数外面定义的变量是全局变量,函数内可以直接使用。
在函数内部没有使用var定义的=变量则为全局变量,
*在函数内使用var关键字定义的变量是局部变量,即出了函数外边无法获取。
js函数定义的参数没有默认值,(形参的默认值在之前只有新版火狐支持,目前新版的chrome浏览器也可以支持)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>变量的作用域</title>
</head>
<body>
    <script>
        /* 全局变量:
                在函数外部声明的变量都是全局变量
                在函数内部不使用var关键字定义变量也是全局变量
            局部变量:
                在函数内部使用var声明变量是局部变量
            注意:
                在函数内部定义了和全局变量同名的局部变量
                那么局部变量就改变了全局变量的作用域了

                在函数内部优先使用局部变量
        */
        var a=11;
        function Func(){
            // console.log(a);

            b=20;
            var c=30;
            var a=50;
            console.log(a,c);
            a=10;
        }
        Func();
        console.log(a,b);
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值