javascript day4
函数
函数:实现某一特定功能的代码的集合
作用:可以提高代码的高度复用
js函数声明
function 函数名([参数]){
函数体
}
function say_hi(){
alert("hello")
}//函数的声明
say_hi()//函数的调用
函数的声明,函数声明之后不会自动执行,想要执行需要进行函数的调用
paseInt()-----转整型
函数的参数
0----100 num1-num2
<script>
function he(num1,num2){
let sum=0
for(let i=num1;i<=num2;i++){
if(i%2==0){
sum+=i}}
return sum//返回值
}
he(100,200)
</script>
underfined:如果一个函数没有设置返回值,那么它的返回值就是underfined
return 返回值——只能返回出去一个值
函数中遇到return会立即退出函数。return后面的代码不会被执行
变量的作用域
变量名生效的范围
根据变量的作用范围,变量分为全局变量和局部变量
全局变量:在全局当中都可以使用的变量
局部变量:在函数内部声明的变量,局部变量的作用域是在函数体内生效的,形参也可以看作是局部变量
块作用域
{}if for
作用域链
作用域就近原则——现在自身找若没有,再去上一级找
值传递和引用传递
原来数不会变,基本是占内存了
引用数据类型
栈内存:
基本数据类型实际数据存储在栈内存
引用数据类型实际数据存储在堆内存,栈内存存储的是堆内存的内存地址
函数作为参数进行传递
一个函数A作为另外一个函数B的参数,那么该函数A就叫做回调函数
<script>
function test(){
document.writeln("test1")
}
function test2(fn){
fn()
document.writeln("test2")
}
//函数后面带(),则立即执行
test2(test1)
</script>
在吧函数作为参数传递的时候一定不能带()
arr.forEach(回调函数)
默认值参数
默认值参数必须在普通参数后面
求圆面积的函数
<script>
function area(r,PI=3.14){
return PI*r*r
}
let a=area(2)
console.log(a)
</script>
可变长参数
求和函数
<script>
function get_sum(){
console.log(arguments)//arguments为伪数组
let sum=0
foe(let i in arguments){
sum+=arguments[i]
}
console.log(sum)
}
let a=get_sum()
</script>
匿名函数
没名字的函数
函数作为某个函数的参数——用匿名函数
<script>
let fn=function(){
alert("这是函数表达式")
}
</script>
箭头函数
是为了简化函数的写法,以及解决this关键字指向问题的
箭头函数不需要加return
<script>
let fn=()=>{
console.log(123)
}
fn()
</script>
<script>
let fn=(x,y)=>x+y
console.log(fn())
</script>
函数的递归
函数自身调用自身
求阶乘
<script>
function get_jiec(num){
//递归接口
if(num==1){
return 1
}else{
return get_jiec(num-1)*num
}
</script>
求累加和的函数
<script>function get_lj(num){if(num==1){return 1}else{return get_lj(num-1)+num}}alert(get_lj(5))</script>
url编码decodeURI
url解码encodeURI
eval:跳转网页
闭包
闭包可以解决全局污染的问题,可以让函数当中的某个变量常驻在内存当中
如果一个函数使用了外层函数的局部变量,访问了其他作用域的变量,那么内层函数叫闭包
统计函数被调用的次数
<script>
function outer(){
let num=1
function inner(){//return num
console.log(num)
}
inner()
}
outer()
</script>
//全局变量容易被污染
改变不了num
缺点:若变量多,占用内存多
用闭包统计函数调用的次数问题
<script>let num=1function outer(){let num1=0function inner(){num1++document.writeln(`这个函数调用了${num1}次了`)}return inner()}let a=outer()
a()
a()
a()</script>
数组的高级方法
<script>
let arr1=[1,2,3,4]let newarr=arr1.map((x)=>x=x*2)console.log(newarr)
</script>
回调函数——危险危险危险
reduce——返回总值
<script>
let arr1=[1,2,3,4]
let b=arr1.reduce(fuction(x,y){
alert(1)
return x+y
})
console.log(b)
</script>
filter()——创建新的数组
<script>
let arr1=[1,2,3,4]
let b=arr1.filter(function(n){
//console.log(n)
return n%2==0
})
console.log(b)
</script>
对象
存储数据的方式
声明对象——key : value,
<script>
let obj1={
uname:"zhangs",
age:21,
heighr:166,
sing:finction(){
console.log(sing)
}
}
//对象.属性
console.log(obi.uname)
//对象[key]
console.log(obj1["uname"])
obj1.sing("这是对象")
//手动改值——重新赋值
obj1.age=22
console.log(obj1.age)
//遍历对象 for in
for(let i in obj1){
console.log(obj1[i])
}
</script>