函数
页面语句会顺序执行,定义函数有利于代码封装,可以把要处理的js封装在一个函数里,减少代码写作,支持多页调用,也可以通过事件执行
函数的定义:普通函数
function函数名(){
执行语句
}
调用:函数名(1,2,3)
带返回值的函数
带参数的函数
function 函数名(a,b,c){
执行语句
return a+b
}
调用:函数名var v=(1,2,3)
递归:自己调用自己,模拟循环
function函数名(num){
if(num==1){return 1}
return 函数名(num-1)
}
调用:函数名var v=(10)
js没有重载
重载:可以在同一个作用域下,定义同名函数,但是执行不同操作,js不可以
函数的声明方式:
函数声明:
function fun(a,b) {//函数声明
console.log("这是第一个函数")
}
函数表达式:
var fun1=function(b,c){
console.log("这是第二个函数)
}
匿名函数
(function)(){
console.log("这是匿名函数)
})()
可变数组(可变参数):叫做argument,类似于数组,用来接受数下的多个参数值,只能在函数里,但是不能像数组一样随意更改
例如:
function fun(){
console.log(arguments.length)
console.log(arguments[2],arguments[4])
}
fun(1,2,3,4,5)
注意:arguments虽然类似于数组,但是是固定长度,不像数组是可变长度,对于数组下的操作函数,除了遍历都不可以用,只能对可变数组进行变量和修改值。
变量和作用域和内存问题
全局变量:在全局变量定义下
私有变量:在js下,只有函数里定义的变量才是私有的
基本数据类型:数字(number),字符串(string),布尔(boolean),null,undefined
引用数据类型:object
变量提升和作用域
预解释(变量提升)
在当前的作用域中,js代码执行之前,浏览器首先会把带var和function的声明内容,进行提前声明或定义
声明和定义的区别:
var a //声明:告知浏览器在内存中存储了一个变量
var b=11 //定义:不但定义了变量,还进行了赋值
变量提升的函数和变量区别:
var在内存中只完成了声明
function在内存中完成了声明和定义,只是函数没调用时存储的是字符串
例如:
console.log(a)//输出undefined
var a=11
fun()//执行函数
function fun(){
console.log("这是函数")
}
变量提升注意事项
1.不定义var的区别
console.log(a)//输出 undefined
console.log(b)//报错,没有变量提升的过程
var a=11
b=22
2.不管条件是否成立,都有进行变量提升
console.log(a)//输出underfined 变量还存在
if(false){
var a=12
}
3.当执行一个匿名函数的时候,是不进行域解释的,代码的执行和定义一起完成了
(function)(){
var a=b=3 //var b=3 a=b
})()
}
console.log(b)//3 b变量提升了
console.log(a)//报错 a没有变量提升
4.当函数里的return语句执行时,下面的语句虽然不执行,但是也需要变量提升
注意:函数作用域下,有私有变量找私有变量,没有形参,形参没有找全局,但是如果形参和私有变量进行了变量提升,就不会找全局变量了
function fun(){
console.log(a)
return false
var a=66
}
fun()
5.在js中,变量和函数名称重复,也冲突,在变量提升时,如果名称声明过了,不会再次声明,但是可以重新赋值
function num(){
console.log(111)
}
num()
var num=66
console.log(num)//输出:66,var不会重新声明,但是可以改变值
num()//报错