函数
# 函数
函数:就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用
//声明函数
function getSum(num1,num2){
var sum=0;
for(var i=num1;i<num2;i++){
sum+=i;
}
console.log(sum);
}
//调用函数
getSum(1,100);
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 函数的参数
在声明函数时,可以在函数名词后面的小括号中添加一些参数,这些参数被称为形参,而在调用该函数时,同样也需要传递相应的参数,这些参数被称为实参
参数的作用:在函数内部某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去
形参和实参不匹配问题
参数个数 | 说明 |
---|---|
参数等于形参个数 | 输出正确结果 |
参数多余形参个数 | 只取形参的个数 |
参数小于形参个数 | 多的形参定义为undefined |
# 返回值
return
一个函数只能有一个return
没有返回值 返回的是 undefined
# arguments
每个函数内置的伪数组
function fn(){
for(var i=0;i<arguments.length;i++){
console.log(arguments[i]);
}
}
fn(1,2,3);
1
2
3
4
5
6
2
3
4
5
6
参数伪数组
- 具有数组length属性
- 按照索引的方式进行存储
- 没有真正数组的一些方法 pop() 、push()
# 函数声明
关键字自定义函数
function fn(){ ... }
1
2
3函数表达式(匿名函数)
var fun = function(){...};
1例
var fun = function(arr){ console.log(arr); } fun('yuadh');
1
2
3
4注意
- fun是变量名 , 不是函数名
- 函数表达式也可以进行传递参数
# 作用域
全局作用域
局部作用域
# 全局作用域
在整个script标签内的
在全局作用域下的变量 是全局变量
# 局部作用域
在函数内部
在局部作用域下的变量 是局部变量
注意
- 在局部作用域下不使用 var 声明的变量也是全局变量
- 全局变量只有在浏览器关闭时才会销毁,比较占内存
# 块作用域
没有块作用域
es6 有作用域
# 作用域链
内部函数访问函数的变量,采取的是链式查找的方式来决定取那个值
(内部向外部取值)
# 预解析
我们 js 引擎运行 js 分为两步:1.预解析 2.代码执行
笔记
1、预解析 js 引擎会把 js 里面所有的 var 还有 function提升到当前作用域的最前面
2、代码执行 按照代码书写的顺序从上往下执行
预解析分为 变量预解析(变量提升) 和 函数预解析 (函数提升)
笔记
1、变量提升 就是把所有的变量声明提升到当前作用域的最前面 不提升赋值操作
2、函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
console.log(num);
var num=10;
=========相当于
var num;
console.log(num);
num=10;
=========结果是
undefined
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
fun();
var fun = function (){
console.log(22);
}
========相当于
var fun;
fun();
fun = function(){
console.log(22);
}
========结果是
报错
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 案例分析1
var num=10;
fun();
function fun(){
console.log(num);
var num=20;
}
==================
var num;
function fun(){
var num;
console.log(num);
num=20;
}
num=10;
fun();
==================结果是
undefined
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 案例分析2
var num = 10;
function fn(){
console.log(num);
var num=20;
console.log(num);
}
fn();
========================
var num;
function fn(){
var num;
console.log(num);
num=20;
console.log(num);
}
fn();
===================结果是
undefined;
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 案例分析3
f1();
console.log(c);
console.log(b);
console.log(a);
function f1(){
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
=================
function f1(){
var a;
a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
f1();
console.log(c);
console.log(b);
console.log(a);
=================结果是
9
9
9
9
9
报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48