• 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
    
                    作用:终止本次循环,继续执行下一次的循环操作
    
    
  • 相关阅读:
    2018-8-10-win10-uwp-商业游戏-1.2.1
    2018-8-10-win10-uwp-商业游戏-1.2.1
    2019-3-1-获取-Nuget-版本号
    2019-3-1-获取-Nuget-版本号
    2019-9-24-dotnet-remoting-抛出异常
    2019-9-24-dotnet-remoting-抛出异常
    2018-2-13-C#-解析-sln-文件
    2018-2-13-C#-解析-sln-文件
    2018-10-19-jekyll-添加-Valine-评论
    2018-10-19-jekyll-添加-Valine-评论
  • 原文地址:https://www.cnblogs.com/mountboy/p/13542779.html
Copyright © 2020-2023  润新知