函数; js的垃圾回收机制

函数

函数主要是放置一个代码块,放置的代码块不会自动运行,需要用函数控制代码区块的运行。调用函数就可以让代码区块的代码运行。

创建函数

1. 通过 function 命令创建函数
// function 创建函数,函数一般需要一个函数名称,名称后面需要一个()。有函数名称的叫具名函数(有函数名的
函数)
function fn1(){ // 函数是引用数据类型,funxtion创建的函数是在堆内存里面,fn1函数名称对应的函
数的堆内存的内存地址。
var a = 10;
var b = 5;
console.log(a * b)
}
// 调用函数: 函数名称加()
fn1()
2. 函数表达式的方式创建,把一个函数赋值给变量
var f2 = function(){
console.log("f2")
}
f2() // 调用函数
3. Function(argument,...,body) 构造函数创建函数。 argument 是函数的参数, body 是函数的主体 ( 函数代码区
) 。一般用于将字符串转为 js 代码运行。
var f3 = new Function("console.log('f3')")
console.log(typeof f3)
f3()
4. 匿名函数,没有名字的函数 ,之间 写匿名函数需要加 (), 一般没有特殊需求不会用匿名函数。小括号前面的语句需要加分号。
fn1();
// 2. 匿名函数,没有名字的函数,之间写匿名函数需要加(),一般没有特殊需求不会用匿名函数。小括号前面
的语句需要加分号。
(function(){
333
})
5. 函数的重复声明 , 后声明函数覆盖前面声明函数
function fa(){
console.log("fa")
}
function fa(){
console.log("fa----repeat")
}
fa()

函数参数

6. 函数的小括号里面创建的变量就叫参数,也叫形参 ( 没有赋值的变量 ), 形参的数量没有限制 , 多个参数用逗号分割。形参默认值是undefifined
function fc(a,b,c){
console.log(a+b+c)
}
fc(10,4,6) // 调用给函数传的值叫实参(实际参数是给形参赋值的),调用函数不一定每一个参数都要赋值。
根据情况看是否需要传参
7. 形参设置默认值 , 如果传递了参数形参则是传递参数,如果没有传递参数,则用默认值。
function fd(a=1,b=1,c=1){
console.log(a+b+c)
}
fd(10);
8. arguments 能获取到函数的实参 , 是一个类似数组对象
function fn1(){
// 取出arguments里面的所有实参
for(var i=0;i<arguments.length;i++){
console.log(arguments[i])
}
}
fn1(1,2,"a")
9. 函数提升, function 创建的函数在 js 编译的时候提升到代码顶部。
由于有函数提升,所以在函数创建前面调用函数不会报错。
函数名和变量名相同,是函数名覆盖变量名
项目中尽量不要用函数或变量提升特性在创建前使用函数或者变量。
fn2()
function fn2(){
console.log("fn2")
}
var fn2
console.log(fn2)

 10. 回调函数: 把一个函数作为实参传递给另外一个函数

// 把callback参数当做一个函数
function fn3(callback){
callback()
}
var fx = function(){
console.log("xxxx")
}
// 调用fn3 把fx函数作为参数传递到fn3,fn3的callback就是fn3函数
11. 回调函数的参数
function fna(callback){
// 要找到callback参数对应的是哪个函数,10就是给该函数传递的参数
callback(10)
}
var fxa = function(num){
console.log(num)
}
// 调用fn3 把fx函数作为参数传递到fn3,fn3的callback就是fn3函数
fna(fxa)
12. return 返回值函数 , 可以把函数内部的值返回到函数外部。如果函数没有 return 关键词,默认返回到外面的是一 个undefifined
function f4(){
var a = 10
var b = 10
var c = a*b
// return 也是函数运行结束标志,return后面的代码不会执行
return c
console.log("oooooooo")
}
// f4() 函数运行会把return 后面的结果返回到函数外面,这里是把c变量返回到函数外面,相当于f4() 运行后
就得到c,再把c赋值给res变量。
var res = f4()
console.log(res)
13. 全局变量和局部变量
  1. 在函数外面创建的变量就是全局变量,可以在js文件的任意位置使用。
  2. 在函数内部创建的变量就是局部变量,局部变量只能在函数内部使用。
  3. 向在函数外部获取函数内部是局部变量值,可以用return把局部变量值返回到函数外部
    {
    var x = 100
    function f4(){
    // 局部变量也存在变量提升,是提升在函数顶部
    console.log(a, "----")
    var a = "a100"
    var x = 50
    console.log(x, "++")
    console.log(a)
    return a
    }
    var test = f4()
    console.log(test)
    // console.log(a)
    }
    console.log(x, "++")
  4. () 小括号可以立即运行函数
    function f5(){
    console.log("1-------")
    }
    f5();
    // 立即运行一个匿名函数
    (function(a){
    console.log("匿名函数",a)
    })("1")
  5.  闭包: 函数内部返回一个函数

    作用: 把函数内部的变量持久的放在内存中。

    function f7(){
    var a = 0
    // return 返回一个函数
    return function(){
    a++
    console.log(a)
    }
    }
    // 调用f7函数就拿到了return返回的函数
    // f7a 等于f7函数返回的匿名函数
    var f7a = f7()
    // 调用f7a函数相当于是执行f7返回的匿名函数
    f7a()
    f7a()
    f7a()
  6. 递归函数:函数调用自身函数 ( 类似无限循环 )
    使用递归函数需要有结束条件,不能无限调用 , 不然就会内存溢出
// 使用递归函数需要有结束条件,不能无限调用,不然就会内存溢出
{
function f8(){
console.log(1)
// f8()
}
f8()
// 案例: 1-5的阶乘(1*2*3*4*5)
// 1. 创建一个函数,函数要写出需要的结果
// 2. 递归函数必须要有一个结束递归的条件
// 3. 递归函数是从最里层(最后一个函数,结束条件开始)开始计算
function countNum(num){
// 递归结束的条件当num=1丁久结束
if(num === 1){
return 1
}
// 想要的阶乘结果
return num*countNum(num-1)
}
console.log(countNum(4))
}

 js的垃圾回收机制

编程中的垃圾指的是用过的变量。由于变量会产生对应的内存空间,如果一个变量使用完了不去把对应的内存释放,容易造成内存溢出。js 程序自带一套垃圾回收机制, js 会自动判断不用的变量内存会被释放调。
js 变量不使用的时候,或者 js 变量在使用完成后会自动销毁。局部变量会自动销毁,用 var 关键词创建的全局变量则是在应用关闭时候才销毁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值