• JavaScript函数


    目录

    函数

    定义函数的两种方式

    函数自调用

    函数的数据类型

    回调函数

    作用域&块级作用域

    局部变量VS全局变量

    隐式全局变量VS全局变量

    作用域链 

    预解析


    函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。

    函数分两种

    命名函数(函数声明):如果函数有名字,就是命名函数

    匿名函数(函数表达式):如果函数没有名字,就是匿名函数

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. //命名函数(函数声明)
    10. function f1(){
    11. console.log('我是命名函数');
    12. }
    13. //命名函数调用
    14. f1();
    15. //匿名函数(函数表达式)
    16. var f2 =function (){
    17. console.log('我是匿名函数');
    18. }
    19. //匿名函数调用
    20. f2();
    21. script>
    22. body>
    23. html>

    定义函数的两种方式

    函数声明

    function 函数名 () {  //函数体  }
    

    函数表达式

    var 变量 = 匿名函数 ;
    

    把一个函数给一个变量,此时形成了函数表达式

    函数声明和函数表达式二者区别:

    在页面中有两个同名的命名函数,后面的一个命名函数会覆盖前面的命名函数

    在页面中有两个同名的匿名函数,后面的匿名函数不会覆盖前面的匿名函数

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. function f1() {
    10. console.log("哈哈哈");
    11. }
    12. f1();
    13. function f1() {
    14. console.log("你好");
    15. }
    16. f1();
    17. //如果在页面中有两个同名的命名函数,后面的一个命名函数会覆盖前面的命名函数
    18. var f2 = function() {
    19. console.log("函数表达式");
    20. };
    21. f2();
    22. var f2 = function() {
    23. console.log("函数声明");
    24. };
    25. f2();
    26. //如果在页面中有两个同名的匿名函数,后面的匿名函数不会覆盖前面的匿名函数
    27. script>
    28. body>
    29. html>

    函数自调用

    声明函数的同时进行调用

    语法:

    1. function 函数名() {
    2. //函数体
    3. }
    4. 函数名();
    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. //先声明函数
    10. function f1(){
    11. console.log("先声明函数,再调用");
    12. }
    13. f1();
    14. //声明函数的同时进行调用
    15. (function f2(){
    16. console.log('声明函数的同时调用函数');
    17. })();
    18. script>
    19. body>
    20. html>

    函数的数据类型

    函数是有数据类型,它的数据类型是:function

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. function f1(){
    10. console.log('qwert');
    11. }
    12. //输出函数的数据类型
    13. console.log(typeof f1);//function
    14. var f2 = function (){
    15. console.log('asdfg');
    16. }
    17. console.log(typeof f2);//function
    18. script>
    19. body>
    20. html>

     任何数据类型都可以作为参数,函数也可以叫做回调函数

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. function f1(x,y) {
    10. console.log(x+y);
    11. }
    12. f1(10,20);
    13. f1('hello','java');
    14. f1('123',123);
    15. function f3(x) {
    16. console.log(x);
    17. }
    18. f3(true);
    19. script>
    20. body>
    21. html>

     任何数据类型都可以作为返回值,函数也可以

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. function f1() {
    10. console.log("f1函数调用了");
    11. return function() {
    12. console.log("我是f1函数里return返回的结果");
    13. };
    14. }
    15. //ff是一个匿名函数
    16. var ff=f1();
    17. ff();
    18. script>
    19. body>
    20. html>

    回调函数

    函数A作为参数传递到另一个函数B中,并且这个函数B执行函数A。就说函数A叫做回调函数

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. //回调函数:在一个函数中去调用另外一个函数,调用的这个函数是由参数传递过来的
    10. function f1(fn){
    11. console.log('我是f1函数里的输出语句');
    12. fn();
    13. }
    14. function f2(){
    15. console.log("我是回调函数哦~");
    16. }
    17. f1(f2);
    18. script>
    19. body>
    20. html>

    作用域&块级作用域

    作用域:作用域就是在这一个区域内有作用(使用范围)

    块级作用域:一对大括号就可以看成是一块

    JS中没有块级作用域,但是函数除外

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. {
    10. var num = 100;
    11. console.log(num);
    12. }
    13. console.log(num);
    14. if(true){
    15. var num2 =200;
    16. console.log(num2);
    17. }
    18. console.log(num2);
    19. for(var i = 1;i<=5;i++){
    20. var num3 = 300;
    21. console.log(num3);
    22. }
    23. console.log(num3);
    24. function f1(){
    25. var num4 = 400;
    26. console.log(num4);
    27. }
    28. f1();
    29. //JS没有作用域的概念,但是,函数中定义的变量只能在函数中使用
    30. // console.log(num4);
    31. function f2(){
    32. //没有使用var声明的变量自动升级为全局变量,在函数外也可以使用
    33. num5 =500;
    34. console.log(num5);
    35. }
    36. f2();
    37. console.log(num5);
    38. script>
    39. body>
    40. html>

     

    局部变量VS全局变量

    全局变量:在函数外声明的变量,网页上的所有脚本和函数都能访问它

    局部变量:在函数内部声明的变量(使用var),只能在函数内部访问它

            可以在不同的函数中使用名称相同的局部变量

    生存期:

    局部变量在函数运行以后被删除

    全局变量在页面关闭后被删除

    全局变量和局部变量区别:作用域不同、声明位置不同、生存期不同

    隐式全局变量VS全局变量

    隐式全局变量:声明变量时没有使用声明变量的关键字

    隐式全局变量是可以被删除的,但是全局变量是不能被删除的

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. var a1=1; //全局变量
    10. a2=2; //隐式全局变量
    11. delete a1;
    12. delete a2;
    13. console.log(a1);
    14. // console.log(a2);
    15. //隐式全局变量是可以被删除的,但是全局变量是不能被删除的
    16. console.log(typeof a1);//number
    17. console.log(typeof a2);//undefined
    18. script>
    19. body>
    20. html>

    作用域链 

    沿着作用域链一级一级地搜索过程。搜索过程始终从作用域链端开始,然后逐级向回溯,直到找到为止(如果找不到,通常会报错)

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. var num = 10;
    10. function f1() {
    11. // var num = 20;
    12. function f2() {
    13. // var num = 30;
    14. function f3() {
    15. // var num = 50;
    16. console.log(num);
    17. }
    18. f3();
    19. }
    20. f2();
    21. }
    22. f1();
    23. script>
    24. body>
    25. html>

    预解析

    预解析就是预先解析function和var

    变量的声明提前了----提前到当前所在的作用域的最上面

    函数的声明也会被提前---提前到当前所在的作用域的最上面

    1. html>
    2. <html>
    3. <head>
    4. <meta charset="utf-8">
    5. <title>title>
    6. head>
    7. <body>
    8. <script>
    9. //先声明变量再使用
    10. var num =10;
    11. console.log(num);
    12. console.log(number);//underfined
    13. var number = 100;
    14. /*
    15. console.log(number);
    16. var number = 100;
    17. 等价于:
    18. var number;
    19. console.log(number);
    20. number = 100;
    21. */
    22. f1();
    23. function f1() {
    24. console.log(num);
    25. var num=10;
    26. }
    27. script>
    28. body>
    29. html>

  • 相关阅读:
    教师工作量管理系统思路(链表应用)
    vscode 安装Vue插件
    shell——函数,正则
    kitti2bag 安装出现的各种错误
    如此简单的k8s,快速玩转ingress
    set 模拟与用法
    华为机试真题 C++ 实现【区间交集】
    【Flink源码】JobManager启动流程
    再畅通工程(最小生成树)
    开发人员都需要知道的几款优秀数据库管理工具
  • 原文地址:https://blog.csdn.net/qq_51810428/article/details/126896021