js学习笔记--函数/作用域

文章介绍了JavaScript中的函数创建,包括带有返回值的函数和匿名函数的使用。讨论了作用域的概念,如全局和局部作用域,以及变量提升和作用域链。提出了全局污染的解决方案——匿名函数自调用。此外,文章还讲解了回调函数的定义和使用,并提供了一个使用回调函数计算两个日期间闰年数量的例子。最后,解释了递归的概念,强调了递归在设置正确结束条件下的应用。

一、创建函数:

function 函数名(形参){

        函数体

}

函数名(实参)

function demo(a){
    console.log(a)
}
demo(1)
//输出1

带有返回值的函数:

function 函数名(形参){

        函数体

        return 值  //返回值

}

函数名(实参)  //能够的到函数的返回值

1. return关键字用来返回函数的结果

2. return的返回值需要调用函数才可以拿到

3. return语句后不能写代码,不会执行,函数遇到return就结束了

4. return可以单独使用,只用来结束函数,外部拿到的值是undefined

function demo(a){
	console.log('我是函数功能')
	return '我是结果'+a
}
demo(666)//只调用函数的功能
console.log(demo(666))//先调用函数功能,再打印函数返回值
var str = demo(999)//调用函数,并将返回值存入str中
console.log(str)//打印str存的值(函数的返回值)
console.log(str+'哈哈哈哈')//对str做进一步的处理

匿名函数:

var 函数名 = function(){

        函数体

}

函数名与函数名():

函数名: 本质上是一个变量,保存了函数的全部内容,是function函数类型,如:fn

函数名():表示在调用函数,执行函数的功能,如果有返回值,还能拿到返回值,如:fn()

二、作用域

全局作用域:在函数以外的区域,有且只有一个全局作用域

局部作用域:在函数内的作用域,可以有多个作用域

全局变量:在全局作用域下声明的变量,可以在任意作用域下使用

局部变量:在局部作用域下声明的变量,只能在所在局部作用域下使用

全局函数:在全局作用域下创建的函数,可以在任意作用域下调用

局部函数:在局部作用域下创建的函数,只能在所处局部作用域下调用

变量的声明提升:

在程序执行前,会将用var声明的变量提升至所在作用域的最前面。但注意:只提升声明部分,赋值部分不提升

函数的提升:在程序执行前,会将函数的全部内容提升到所在作用域的最前面

作用域链:作用域之间嵌套形成的结构。在查找变量时,会先从当前作用域下查找,如果没有,会沿着作用域链一级级向上找

三、全局污染解决方案:

匿名函数自调用

;(function() {

    在此局部作用域下,变量都是局部变量

})()

; 在匿名函数自调用前加分号,结束上一行,就可以防止与上一行代码连在一起执行

(前面的小括号把匿名函数整体包裹起来,表示一个整体

() 后面的小括号表示要调用当前的这个匿名函数

四、回调函数

就是把一个函数类型的值作为参数,传递给另外一个函数,被传递的这个函数就叫做回调函数

function 函数名1(形参){
   形参() // 传递进来的函数
}
function 函数名2(){
   函数体
}
函数名1(函数名2)// 传递的是普通函数的函数名
函数名1(function(){函数体})// 传递的是匿名函数的全部内容
//创建函数getCount传递任意两个数字
//统计这两个数字之间闰年的数量
//要求:使用回调函数获取结果
function getCount(n1,n2,cb) {
	for (var i = n1, count = 0; i <= n2; i++) {
		if(i%4===0&&i%100!==0 || i%400===0){
			count++
		}
	}
	//return count
	cb(count)
}
//console.log(getCount(1949,2100)) 
getCount(1949,2100,function(p){
	console.log(p)
})

五、递归

递归指的是函数自己调用自己。

递归本身是一个死循环,如果要使用递归解决问题,切记要设置结束条件及时退出

递归的要点:总结规律+边界条件

结束条件通常结合return一起使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值