目录
函数
函数也是一个对象
函数中可以封装一些功能(代码),在需要时可以执行这些功能(代码)
函数中可以村一些代码在需要的时候调用
内置函数
js内部提供的
isNaN()
String()
Number()
alert()
confrim()
自定义函数
自己定义自己使用
语法:
function 函数名称() {
重复执行的代码段
}
调用函数:
让函数运行起来
语法:
函数名称()
函数的本质
定义函数:
其实也是在定义变量 , 就是在内存中开辟空间,存储一段代码进入
存储代码的数据类型:
function
函数的本质:
一个比较特殊的变量,存储的是一段代码,类型是function类型,这段代码要运行就 --- 函数名()
带参数的函数
形参:
在定义函数的小括号中,可以放入多个预定义好的变量
实参:
给形参赋值,让形参在函数内有具体的数据
实参可以是一个对象,也可以是一个函数
带返回值的函数
当我们调用函数后,需要得到一个结果
就需要在函数内 return 结果
return后面的代码不执行
只能返回一个值,不能返回对各
返回值可以是任意的数据类型
可以是一个对象,也可以是一个函数
匿名函数
没有名字的函数叫匿名函数
匿名函数的使用,只能把它赋值给一个变量
匿名函数如何使用?
1.将他赋值给一个变量
2.()括起来,后面再加() 表示这个函数定义好就立即调用 --- 立即执行函数/自调用函数
3.立即执行函数往往只会执行一次
语法:
( function() {
console.log( )
} ) ()
break,continue和return的区别?
使用break可以退出当前的循环
使用continue用于跳过当次循环
使用return可以结束整个函数
预解析(变量的提升)
浏览器在运行js代码在执行之前,会先将所有js代码进行分析
预解析具体在干嘛?
在所有的代码中找 变量的定义 和 函数的定义。找到了就将变量的定义代码和函数的定义代码,提升放在所有代码的最前面。
在执行的时候,按照解析后的代码进行执行。
当预解析的时候,函数名和变量名同名冲突了,会忽略变量名的预解析,保留函数名的预解析
js中报错会中断代码执行,报错后的代码是不执行的
函数嵌套
函数大括号中可以放任意代码
可以有函数定义
可以有函数调用
作用域
能起到作用的区域。定义在不同地方的变量或者函数,作用的地方是不一样的。全局变量,作用于整个网页。局部变量,作用于函数内部。
全局作用域
全局变量 - 定义在函数外的变量 - 作用域是整个页面
局部作用域
局部变量 - 定义在函数内的变量 - 作用域是函数内部
局部可以访问到全局的变量,全局访问不到局部的变量
作用域链:
由作用域嵌套形成的一条链式结构
当我们将一个变量当做是一个具体的数据使用的时候,先在当前作用域中找是否定义过这个变量,定义过:直接使用;没有定义过:就去上级作用域中去找,....直到全局,如果全局也没有定义过,报错
当我们给一个变量空间赋值的时候,先在当前作用域中找是否定义过这个变量,定义过:赋值成功,修改的是当前作用域中的这个变量;没有定义过:就去上级作用域中找,....直到全局,全局找到了,就是在给全局变量赋值,如果全局也找不到,就会在全局定义这个变量并赋值
递归函数:
在函数内调用自己
计算一个数字以内的累加
function fn(n) {
if(n === 1) {
return 1
}
return n + fn(n-1)
}
var s = fn(5)
console.log(s);