zoukankan      html  css  js  c++  java
  • 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
    
                    作用:终止本次循环,继续执行下一次的循环操作
    
    
  • 相关阅读:
    CSUFT 1002 Robot Navigation
    CSUFT 1003 All Your Base
    Uva 1599 最佳路径
    Uva 10129 单词
    欧拉回路
    Uva 10305 给任务排序
    uva 816 Abbott的复仇
    Uva 1103 古代象形文字
    Uva 10118 免费糖果
    Uva 725 除法
  • 原文地址:https://www.cnblogs.com/mountboy/p/13542779.html
Copyright © 2011-2022 走看看