JavaScript 函数部分
p113-114 函数导读
概念:可能会经常重复用到一些代码,把他封装起来,方便使用。
目的:让大量代码重复使用
p115-116 函数的使用
函数的声明:
function 函数名(参数列表){
代码块
}
调用函数一定要带上小括号 例如:函数名()
p117-118 函数的参数
形参:形式参数 声明中
实参:实际参数 调用中
参数之间用逗号隔开
p119 函数形参和实参个数不匹配的情况
1.个数匹配。正常
2.实参的个数多于形参
会取到形参的个数
3.如果实参的格式小于形参的个数
num2 是一个变量但是没有接受值,多的形参定义为undefined就是underfined,结果是NaN
p120-125 函数的应用
Return 的注意事项
- return 后面的代码不会被执行
- return 只能返回一个值
- return num1,num2; return返回最后一个值
- 返回多个值的时候,可以通过数组 return [num1,num2];
- 函数有返回值,返回return 后面的值,没有的话返回undefined/
p126 arguments的使用
我们不知道到底需要多少个形式参数,用arguments来代替,用来获取参数,里面存储了传递的所有实参(是一种伪类数组(1.具有数组的length 属性 2.按照索引的方式进行存取 3.他没有真正数组的一些方法))
我们按照数组遍历的方法来使用arguments的长度
<script>
function getMax(){
var max = arguments[0];
for(var i=1;i<arguments.length;i++){
if(arguments[i]>max){
max=arguments[i];
}
}
return max;
}
console.log(getMax(1,2,3,4,12,61));
</script>
p128 翻转数组
function reverse(arr){
var newArr = [];
for(var i = arr.length-1;i>= 0 ;i--){
newArr[newArr.length]=arr[i];
}
return newArr;
}
var arr1=reverse([1,2,3,4,5]);
console.log(arr1);
p133函数的声明方式
1.利用函数关键字自定义函数
2.函数表达式(匿名函数)
var fun = function(arg){
console.log('我是一个函数表达式');
console.log(arg);
}
p134-139 作用域,全局变量,局部变量
- 代码名字在某个范围内起作用和效果,目的是为了提高程序的可靠性,更重要的是减少命名冲突
- js的作用域,在(es6)之前:全局作用域 局部作用域
- 全局作用域,在整个script标签内,或者整个外部文件的时候
- 局部作用域:在函数内部就是局部作用域,指代函数内部起效果和作用
全局/局部变量
- 全局变量:浏览器关闭时才会销毁,比较占用内存
- 局部变量:函数运行之后就会被销毁
JS现阶段没有块级作用域,es6里面才有作用域,for{} if {}这些都属于块级作用域。
作用域链(就近原则)
- 函数内部再来一个函数,会有个新的作用域
- 内部函数是可以访问外部函数的
- 从内部函数->外部函数->全局变量, 一层层往往外面去找。采取的是就近原则。
预解析
JS代码是由浏览器中的解释器来执行的,JS解释器在运行JS代码的时候分为两步:预解析和代码啊执行
-
预解析
js引擎会把js里面所有的var还有function提升到当前作用域的最前面
- 分为变量预解析(变量提升)和函数预解析
- 变量(所有用var声明的,包括方法返回)提升:就是把所有的变量声明提升到当前作用域最前面 不提升赋值操作
- 函数提升:函数表达式,他的调用必须写在调用的后面
2.代码执行
按照代码书写的顺序从上往下执行
注意:很容易弄错
<script>
f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
var a=b=c=9;
// 这里相当于var a=9;b=9;c=9;这里面b,c是全局变量
console.log(a);
console.log(b);
console.log(c);
}
</script>