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 你要遍历的对象名字){
在这里变量名存储的就是对象中的每一条数据的键名
注意:取值的时候使用数组关联语法
}
作用域,递归,对象
于 2023-06-03 15:46:44 首次发布