作用域,递归,对象

return的作用
    return的作用:
                    1.返回数据的,可以让调用者拿到函数内部的数据
                    2.可以结束函数,只要在函数中碰到return,函数就会终止,不会继续执行
                        一般建议:返回值写在函数的最后
作用域
      作用域:研究作用域其实就是研究某一个东西的作用范围
                    全局作用域:直接书写在script标签中的代码(书写在函数外的代码)称为全局作用域
                    局部(私有、函数)作用域:书写在函数内的代码称为局部代码
                    在js中只有函数可以形成局部作用域。
                今天研究作用域的主题:就是研究变量的作用域,也就是变量的作用范围。
                    研究变量的访问机制
                    研究变量赋值机制
                先搞清楚什么叫做变量的 定义 访问 赋值
                var a//定义变量
                a = 10//赋值
                console.log(a)//访问
                a = a + 20//既有访问也有赋值
                变量在哪定义,作用域就在哪里,该变量只能在自己的作用域内使用
                定义在函数外就称为全局,整个文件都可以使用这个变量
                定义在函数内的变量就称为局部变量,只能在该函数内使用
变量的访问机制
     变量的访问机制:先在自己的区域中看有没有这个变量,如果有就使用,如果没有就去父级区域看  父级有就使用,父级依然没有继续一层一层向上查找,直到全局都没有,就报错
变量的赋值机制
    变量的赋值机制:自己区域中有这个变量,就赋值,自己区域中没有就给父级区域中的变量赋值
,父级如果也没有,就一层一层向上找,直到全局,如果全局也没有这个变量,会自动的把这个变量定义成全局变量,再进行
递归
     递归:需要借助于函数去书写,其实递归就是函数的一种高级手段
                    在程序中函数内部自己调用自己的现象我们就称为递归
                    注意:函数自己调用自己也就是递归会出现死循环(死递归)的现象,为了避免这种现象的出现,在书写递归的时候一定要去找一递归的结束条件。
    
                10! = 10*9*8*7*6*5*4*3*2*1
                递归的思想去思考10!,我们可以这样思考:
                    10!= 9!*10
                    9! = 8!*9
                    8! = 7!*8
                    ....
                    ....
                    1! = 1
                
                只要用递归写程序:
                    1)先写一个函数,思考函数中是否参数
                    2)思考递归的结束条件
                    3)思考递归一直往前问的规律
斐波那契数列
     斐波那契数列:1 1 2 3 5 8 13。。。。。。
                求第n项的数字是几
                规律:第n项数据是前面2项数据之和
                用递归的思想写斐波那契数列数列:
                用递归写代码的步骤:
                    1)先写一个函数,思考是否参数
                    2) 思考递归的结束条件,问道第一项和第二项就停止了,第一和第二的取值永远为1
                    3)递归往前问的规律:n = (n-1)+(n-2)
对象
     对象:js里面的复杂数据类型,单词是object,标志是{}
                可以把对象数据类型看作是一个容器,里面可以存储很多条数据,对象是一个无序的集合
                对象也叫做键值对的集合
                创造对象的语法:
                    语法一:字面量方式创造
                        var 变量名 = {},造了一个空对象
                        var 变量名 = {键1:值1,键2:值2,键3:值3....}
                    语法二:内置构造函数方式创造
                        var 变量名 = new object(),造了一个空对象
                        造带有数据的对象,今天暂时不研究
操作对象
      键名不允许重复
                操作对象:其实就是研究操作对象中的数据
                增、删、改、查
                语法一:点语法、
                    增加数据:变量名.键名 = 值
                    删除数据:delete 变量名.键名
                    修改数据:变量名.键名 = 值
                        注意:增加和修改的语法是一样的,那么当对象中这个键名没有出现过就是增加,出现过就是修改
                    查找数据:变量名.键名
                        如果键名不存在结果是undefined
                语法二:数组关联语法
                    增加数据:变量名[键名] = 值
                    删除数据:delete 变量名[键名]
                    修改数据:变量名[键名] = 值
                    查找数据 变量名[键名]
                    注意:键名书写的时候如果要当作字符串处理,必须添加引号,如果不写引号,会把键名当作变量处理
                记住:点语法把键名直接当作字符串处理,不会识别变量,数组惯量语法中,键名如果不带引号会识别成变量
遍历对象
      遍历对象:一个一个获取到对象中的数据
                语法:for(var 变量名 in 你要遍历的对象名字){
                    在这里变量名存储的就是对象中的每一条数据的键名
                }
总结
    一:return的作用
        作用一:可以返回一个数据,可以让调用者拿到函数内部的数据
        作用而:可以结束函数,在函数中只要碰到return,函数就会终止
    二:函数中式允许嵌套函数书写的
    三:作用域
        全局作用域:函数外的
        局部作用域:函数内的
    
        变量在哪里定义,作用域就在哪里
    (重点重点重点重点重点重点重点重点)
        变量的访问机制:先在自己的区域中查找有没有该变量,有就用,没有就一层一层往上查找,直到全局也没有就报错
        变量的赋值机制:先在自己的区域中查找有没有该变量,有就用,没有就一层一层往上查找,直到全局也没有就把这个变量自动创造成全局变量
    
        面试题:
            var a = b = 20
            console.log(a)
            console.log(b)
            =====================
            var a = b
            console.log(a)
            console.log(b)
    四:递归:递归就是使用函数的一种手段,其实就是函数中自己调用自己
        注意:递归容易出现死循环(死递归),所以如果需要写递归,就一定要找好结束条件
        写递归的步骤:
            1.先一个函数(函数是否需要参数)
            2.找结束条件  return 出结束条件的值
            3.找递归的规律 return 规律
    五:对象数据类型
        1)造对象
            语法一:字面量方式创造
                var 变量名 = {},造了一个空对象
                var 变量名 = {键1:值1,键2:值2,键3:值3....}
            语法二:内置构造函数方式创造
                var 变量名 = new object(),造了一个空对象
                造带有数据的对象,今天暂时不研究
        2)操作对象(重点重点重点重点重点重点重点重点)
            增、删、改、查
            语法一:点语法、
                增加数据:变量名.键名 = 值
                删除数据:delete 变量名.键名
                修改数据:变量名.键名 = 值
                    注意:增加和修改的语法是一样的,那么当对象中这个键名没有出现过就是增加,出现过就是修改
                查找数据:变量名.键名
                    如果键名不存在结果是undefined
            语法二:数组关联语法
                增加数据:变量名[键名] = 值
                删除数据:delete 变量名[键名]
                修改数据:变量名[键名] = 值
                查找数据 变量名[键名]
                注意:键名书写的时候如果要当作字符串处理,必须添加引号,如果不写引号,会把键名当作变量处理
            记住:点语法把键名直接当作字符串处理,不会识别变量,数组惯量语法中,键名如果不带引号会识别成变
        3)遍历对象(重点重点重点重点重点重点重点重点)
            for(var 变量名 in 你要遍历的对象名字){
                    在这里变量名存储的就是对象中的每一条数据的键名
                    注意:取值的时候使用数组关联语法
                }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值