JavaScript基础知识三

1、函数
    1、作用域
        1、什么是作用域

            表示的是函数或变量的可访问范围

            JS中的作用域,分为两种:

                1、函数作用域:只在声明的函数内有效

                2、全局作用域:代码的任何位置处都有效

        2、函数作用域中的变量

            又称为:局部变量

            function test(){

                var num = 10;

                // num 出了test 就失效

            }

        3、全局作用域中的变量

            又称为:全局变量,一经声明,任何位置都能使用的变量

                1、不在function中声明的变量为全局变量

                2、声明变量不使用 var 关键字时,无论任何位置,声明的都是全局变量(不推荐)

        4、面试题

            1、以下代码的执行效果是什么

                function showNum1(){

                    console.log(num);

                    console.log("以下是要声明的内容:");

                    var num = 1888;

                    console.log(num);

                }



                输出结果:

                    1、undefined (正确答案)

                    2、语法错误:num is not defined

                    3、1888



                解析:声明提前

                    什么是声明提前:

                        JS程序在正式执行前,会将所有var声明的变量以及function声明的函数,都预读(事先声明)到所在作用域的顶部。但赋值还保留在原位

                    function showNum1(){

                        console.log(num);

                        console.log("以下是声明的内容:");

                        var num = 1888;

                        console.log(num);

                    }

                    等同于

                    function showNum1(){

                        var num;//预读到顶端

                        console.log(num);

                        console.log("以下是声明的内容:");

                        num = 1888;//赋值保留在原位

                        console.log(num);

                    }

            2、以下代码的执行效果是什么

                <script>

                    function change(a,b){

                        a = 500;

                        b = 300;

                    }



                    var num1 = 30,num2 = 50;

                    console.log(num1,num2);

                    console.log("调用chang函数");

                    change(num1,num2);

                    console.log(num1,num2);

                </script>

                1、

                    30 50

                    调用change函数

                    500 300

                2、

                    30 50

                    调用change函数

                    30 50(正确答案)

                解析:值传递

                    什么是值传递

                        基本数据类型的数据,在做参数传递时,都是按照"值传递"的方式来进行传参的。

                        值传递:真正传递参数值的时候,实际上传递的是值的副本(复制过来的一个数据),而不是原始的值

        5、函数的作用域

            函数的作用域也分为2种:

                1、局部函数

                    在某个function内声明的函数

                2、全局函数

                    在最外层(<script>)定义的函数,就是全局函数,全局函数一经定义,任何位置都能使用

        6、ECMAScript 提供了一组全局函数

            1、parseInt()

            2、parseFloat();

            3、isNaN();

            4、encodeURI()

                URI:Uniform Resource Identifier

                    统一资源标识符

                URL:Uniform Resource Locator

                    统一资源定位器

                encodeURI()的作用:

                    对符合统一资源标识符的数据进行编码,并返回编码后的字符串。所谓的编码,就是将地址中的多字节的文字编译成单字节的文字

                佳:占2~3字节,在URI的规范中,就不能出现中文,只能将中文进行编码

            5、decodeURI()

                作用:对已编码的URI进行解码,即将单字节内容解析成一个文字字符

            6、encodeURIComponent()

                对URI的组件也能进行编码(允许把特殊符号也进行编码)

            7、decodeURIComponent()

                对已编码的URI组件进行解码

            8、eval()

                作用:执行以字符串方式表示的JS代码

    2、特殊的调用 - 递归

        1、什么是递归

            在一个函数的内部再一次调用自己

            问题:计算 5! (5*4*3*2*1)



                5! = 5 * 4!

                4! = 4 * 3!

                3! = 3 * 2!

                2! = 2 * 1!

                1! = 1

            通过一个函数,求数字 n 的阶乘

            function f(n){

                //求数字 n 的阶乘的实现

                

                //递归条件

                if(n == 1){

                    return 1;

                }else{

                    return n * f(n-1);

                }

            }

            ex:

                f(5) : 求5!

                f(10) : 求10!

            效率:

                在本次调用还未结束时,就开始了下一次的自己的调用,那么本次的调用就会被挂起,直到所有的调用都完成之后,才会依次返回。所以递归调用次数越多,效率越低。




2、分支结构
    1、结构分类

        1、顺序结构

            自顶向下,将所有的代码都执行一遍

        2、分支结构

            根据条件选择某部分代码去执行

        3、循环结构

            根据条件选择某部分代码反复的执行

    2、if结构

        1、语法

            if(条件){

                语句块

            }



            如果条件为真,则执行语句块中的内容,否则什么都不执行

            注意:

                1、条件尽量是boolean的,如果不是boolean的,则会发生条件的自动转换

                    以下条件值,会当成false去处理:

                        if(0){}

                        if(0.0){}

                        if(""){}

                        if(null){}

                        if(undefined){}

                        if(NaN){}

                        ex:

                            if(35){} 真

                            if("李文真帅"){} 真

                            if(""){} 假

                2、if后的{}是可以省略的

                    省略后,if只控制其下面的第一条语句

                    建议:尽量不要省略if后的{}

    3、if ... else ...

        语法:

            if(条件){

                语句块1

            }else{

                语句块2

            }

        如果条件为true的话,则执行语句块1的内容,否则,则执行语句块2的内容

    4、if...else if...else if...else

        语法:

            if(条件1){

                语句块1;

            }else if(条件2){

                语句块2;

            }else if(条件3){

                语句块3;

            }...else{

                语句块n

            }



            先判断条件1,如果为真,则执行语句块1

            否则 判断条件2,如果为真,则执行语句块2

            否则 判断条件3,如果为真,则执行语句块3

            如果以上条件都不满足,则执行语句块n

            else是可选的,可有可无

        

    5、switch...case

        1、作用

            等值判断

        2、语法

            switch(变量/表达式){

                case 值1:

                    语句块1;

                    break;//结束switch结构,可选的

                case 值2:

                    语句块2;

                    break;//结束switch结构,可选的

                default:

                    语句块n;

                    break;//结束switch结构,可选的

            }

            注意:

                1、switch后的表达式或变量,与case之间在做比较时,使用 === 判断的

        3、特殊用法

            switch(变量/表达式){

                case 值1:

                case 值2:

                case 值3:

                    语句块1;

                    break;

                ... ...

            }

3、循环结构
    1、什么是循环

        反复的执行相同或相似的代码操作

    2、循环特点

        1、循环条件 :循环的开始和结束

        2、循环操作 :要执行的相同或相似的语句

    3、循环 - while

        1、语法

            while(条件){

                //循环操作/循环体

                //更新循环条件

            }



        2、循环的流程控制

            1、break

                作用:终止整个循环结构的执行

            2、continue

                作用:终止本次循环,继续执行下一次的循环操作

posted @ 2020-08-21 18:33  柒涩波  阅读(120)  评论(0编辑  收藏  举报