函数
函数只定义一次,但可以被执行或调用任意次。
参数的声明
形参:出现在函数定义中,在整个函数体内都可以使用。形参相当于定义在函数内部的变量,是形式上存在的(即声明了没赋值)
实参:出现在主调函数中,实参将值传递给形参。实参是具体的值。
函数的返回值
函数都有一条return语句,return语句导致函数停止执行,并返回它的表达式的值给调用者。 如果return语句没有相关的表达式,则返回undefined。
arguments的使用
伪数组 并不是真正意义上的数组
1、具有数组的 length 属性
2、按照索引的方式进行存储
3、它没有真正数组的一些方法 pop() push()
//我们可以按照数组的方式遍历arguments
function fn() {
for (var i = 0; i < arguments.length; i++) { //相当于arguments=[1,2,3]
console.log(arguments[i]);
}
}
fn(1, 2, 3);
函数的嵌套
//用户输入年份,输出当前年份2月份的天数
function backDay() {
var year = prompt();
if (isRunYear(year)) {
console.log('当前年份是闰年2月份有29天');
} else {
console.log('当前年份是平年2月份有28天');
}
}
backDay()
//判断是否为闰年的函数
function isRunYear(year) {
//如果是闰年返回true 否则 返回 false
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
作用域
1、JavaScript作用域:就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性 更重要的是减少命名冲突
2、js的作用域(es6)之前:全局作用域 局部作用域
3、全局作用域:整个script标签 或者是一个单独的js文件
var num = 10;
4、局部作用域(函数作用域)在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
function fn(){
var num = 20;//局部作用域
}
变量的作用域
变量的作用域:根据作用域的不同我们变量分为全局变量和局部变量
1.全局变量:在全局作用域下的变量在全局下都可以使用
注意:如果在函数内部没有声明直接赋值的变量也属于全局变量
2.局部变量在局部作用域下的变量后者在函数内部的变量就是局部变量
注意:函数的形参也可以看做是局部变量
3.从执行效率来看全局变量和局部变量
(1)全局变量:在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存
(2)局部变量∶只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束后,就会被销毁,因此更节省内存空间
预解析
1、js引擎运行js分为两步: 预解析 代码执行
(1).预解析js引擎会把js里面所有的 var 还有 function 提升到当前作用域的最前面
(2).代码执行按照代码书写的顺序从上往下执行
2、预解析分为变量预解析(变量提升)和函数预解析(函数提升)
(1)变量提升就是把所有的变量声明提升到当前的作用域最前面不提升赋值操作
(2)函数提升就是把所有的函数声明提升到当前作用域的最前面,不调用函数