一、函数
1、函数
1、函数的定义
function 函数名(){
函数体
}
2、函数的调用
函数名()
2、带参函数
function 函数名(形参1,形参2){
函数体
}
函数名(实参)
//求累加和
function getLj(start, end) {
let sum = 0
for (let i = start; i <= end; i++) {
sum += i
}
document.write(sum)
}
getLj(1, 10)
//逻辑中断
function ljzd(x, y) {
x = x || 0
y = y || 0
document.write(x + y)
}
ljzd()
3、return返回值
函数的返回值为return,如果没有写return,函数默认会返回一个undefined,return后面的代码不会再继续执行,return代表函数终止,函数return只能返回一个值
//返回一个数组中的最大值
function getMax(arr1) {
let max = arr1[0]
for (let i = 1; i < arr1.length; i++) {
if (max < arr1[i]) {
max = arr1[i]
}
}
return max
}
let maxplus = getMax([1, 5, 7, 3, 4, 8, 18])
document.write(maxplus)
函数返回多个值,可以使用数组的方式
//求一个数组的最大值和最小值
function getMaxMin(arr) {
//声明一个最大值与最小值的变量
let max = arr[0]
let min = arr[0]
// 遍历数组
for (let i = 1; i < arr.length; i++) {
max < arr[i] ? max = arr[i] : max
min > arr[i] ? min = arr[i] : min
}
return [max, min]
}
let value = getMaxMin([199, 4, 7, 54, 33, 2])
document.write(`数组的最大值为${value[0]},数组的最小值为${value[1]}`)
4、作用域
作用域:可用性的代码范围 增强了程序的可靠性,减少了名字冲突
-
全局作用域
在全局整个页面中都有效果
-
局部作用域
只在一段代码中有效,作用域函数内部
-
块级作用域
由{}包括,if语句,for语句
变量的作用域
-
全局变量:全局变量在任何区域都可以访问和修改
-
局部变量:只能在当前函数内部访问和修改
-
块级变量:只能在块作用域里访问,不能跨块访问,也不能跨函数访问
函数内部的形参可以看做局部变量
5、作用域链
根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链
采取就
6、匿名函数
将匿名函数赋值给一个变量,并且通过变量名称进行调用,我们将这个称为函数表达式
近原则的方式来查找变量最终的值
let fn=function(){
函数体
}
fn()
7、立即执行函数
立即执行,无需调用,多个立即执行函数之间需要用;隔开,防止变量污染
(function () {
console.log('hhhh');
})()
二、对象
对象也是一种数据类型,可以理解为一种无序的集合,用来,描述某个事物
1、声明对象
let 对象名={}
对象由属性和方法组成,属性都是成对出现的,对象的属性没有顺序,属性与值之间使用冒号隔开,多个属性使用逗号隔开,最后一个不需要加逗号
2、属性:信息或特征 方法:功能或行为
let 对象名={
属性名:属性值,
方法名:函数
}
3、访问属性与方法
对象.属性名
对象['属性名']
对象.方法名()
let person = {
name: 'aaa',
age: 18,
sex: '男',
say: function () {
document.write('hello')
}
}
console.log(person);
console.log(person.age);
console.log(person.say());
2、对象操作
1、修改
对象.属性=新值
let obj = {
uname: 'xiaozhang',
age: 18
}
obj.age = 87
console.log(obj);
2、新增属性与方法
可以动态的添加属性
对象.新属性=新值
obj.sex = '男'
obj.sing = function () {
console.log('hello');
}
3、遍历对象
对象里面是无序的键值对,没有规律,使用for in语句遍历
for(let k in 对象){}
for (let k in obj) {
console.log(k); //属性名
console.log(obj[k]);//属性值
}
4、内置对象
js内部提供的对象,包含各种属性和方法给开发者调用
内置对象Math
- random:生成0-1之间的随机数
- ceil:向上取整
- floor:向下取整
- max:找最大数
- min:找最小数
- pow:幂运算
- abs:绝对值
//随机点名案例
let arr = ['zy', 'hz', 'gy', 'zf', 'mc', 'lb', 'cc']
function getRand(min, max) {
return Math.floor(Math.random() * (max - min + 1))
}
let random = getRand(0, arr.length - 1)
document.write(arr[random])
arr.splice(random, 1)
console.log(arr);
//猜数字案例
function getRand(min, max) {
return Math.floor(Math.random() * (max - min + 1))
}
let rad = getRand(1, 10)
while (true) {
let num = +prompt('请您输入一个数字:')
if (num > rad) {
alert('对不起,您猜大了')
} else if (num < rad) {
alert('对不起,您猜小了')
} else {
alert('恭喜,猜对了')
break
}
}
三、堆和栈
栈(stack): 由操作系统自动分配内存空间,自动释放,存储的是基础变量以及一些对象的引用变量,占据固定大小的空间。
堆(heap): 由操作系统动态分配的内存,大小不定也不会自动释放,一般由程序员分配释放,也可由垃圾回收机制回收。
栈:后进先出
`forEach()` 被调用时,不会改变原数组,也就是调用它的数组