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

被折叠的 条评论
为什么被折叠?



