登录
原创

JavaScript-函数

发布于 2021-06-23 阅读 497
  • 前端
  • JavaScript
原创

函数声明

方法一:function关键字

function 函数名() {
  函数内容  

}

方法二:函数表达式(匿名函数)

var fun = function() {
     函数内容
}

函数的调用

1.function关键字声明的函数调用- - -函数名 + 小括号(),如果函数有形参,调用时小括号里面传实参

2.函数表达式声明的函数调用- - -变量名 + 小括号(),如果函数有形参,调用时小括号里面传实参

实参- - -函数声明时,括号内的参数
形参- - -函数调用时,括号内的参数

// 1.function关键字声明的函数
function getSum(num1, num2) {
     var sum = num1 + num2;
     console.log(num1 + '和' + num2 + '的和为:' + sum);
}
// 函数调用---函数名 + 小括号(),如果函数有形参,调用时小括号里面传实参
getSum(2, 8);


// 2.函数表达式声明的函数
var fun = function() {
     console.log('今天天气真真好!');
}
// 函数调用---变量名 + 小括号(),如果函数有形参,调用时小括号里面传实参
fun();

函数的作用域

es6之前,函数作用域分为:全局作用域、局部作用域

全局作用域- - -<script></script>整个标签之中区域
局部作用域- - -函数里面的区域

注意:JavaScript没有块级作用域

{
  内容
}

如果{}块不是函数声明,只是{},那么它之间内容,在括号外也可以访问,没有块级作用域

函数的变量

函数变量分为:全局变量、局部变量
全局变量- - -在<script></script>标签之中,但是函数外,定义的变量,作用范围是全局作用域
局部变量- - -在函数内定义的变量,作用范围是局部作用域,函数外不可使用

注意:1.函数中没有声明,直接赋值的变量,也是全局变量,函数外可以使用 2.函数的形参也算是局部变量

作用域链

变量或者函数的调用,遵循- - -就近原则,一层一层往上找

image.png

预解析

JavaScript执行时会进行预解析,有- - -变量预解析、函数预解析

变量预解析- - -会将变量的声明提升到该变量所在作用域的最前面

<script>
        console.log(color);
        var color = 'pink';
</script>

相当于以下代码:

<script>
        var color;
        console.log(color);
        color = 'pink';
</script>

函数预解析- - -会将函数的声明提升到该函数所在作用域的最前面

<script>
        fun();
        function fun() {
            console.log('今天天气真真好!');
        }
</script>

相当于以下代码:

<script>
        function fun() {
            console.log('今天天气真真好!');
        }
        fun();
</script>

预解析示例1:

image.png

第一个,相当于- - -声明了变量,但是没有赋值的情况下,调用了变量,变量声明了但是没赋值时的得到结果undefined
第二个,函数声明会提到函数调用的前面,所以会输出结果
第三个,相当于声明了变量fu,然后就调用了函数fu,但此时还没有声明函数fu, 所以报错函数fu没有被定义

注意:如果是function关键字声明的函数,不管在函数声明前还是后调用函数都可以;如果是函数表达式声明的函数,需要在函数声明后调用,声明前调用会报错

预解析示例2:

image.png

相当于一下代码:

<script>
        var num;
        function fun() {
            var num;
            console.log(num);
            num = 20;
        }

        num = 10;
        fun();
</script>

打印的num得到结果- - -undefined

预解析示例3:

<script>
        // 案例
        f1();
        console.log(c);
        console.log(b);
        console.log(a);

        function f1() {
            var a = b = c = 9;
            // 相当于 var a = 9; b = 9; c = 9;  b 和 c 直接赋值,没有声明
            // 不是集体声明,集体声明的话:var a = 9, b = 9, c = 9;
            console.log(a);
            console.log(b);
            console.log(c);
        }

        // 相当于以下代码
        /* 
        function f1() {
            var a;
            a = b = c = 9;

            console.log(a);
            console.log(b);
            console.log(c);
        }
        f1();
        console.log(c);
        console.log(b);
        console.log(a); */
    </script>

打印结果:

image.png

评论区

零00
7粉丝

时光荏苒,我自清欢

0

0

0

举报