一,函数
函数的定义:是由时间驱动或者当他调用的时候可以重复使用的代码块
翻译成人话来讲:就是写一段代码,将代码封装起来,用的时候去调用即可
函数的三种写法
1. 1.函数声明定义
格式:
function函数名(参数,参数){
console.log(9999);
}
//之后必须进行调用才可以执行函数里面的代码
函数名();
1.2带参数的函数调用
function fn1(x,y){ //括号里面是形参 相当于x是4 y是6
console.log(x+y);
}
fn1(4,6); //括号里面的值写实参 就是真实的数

1.3带返回值的函数调用
关键字 return
//把函数当做一个值考虑 return之后的语句不再执行
function fn2(a,b){
return a + b;
}
fn2(6,3);
但是向以上那样写并不会输出出来 因为renturn返回的是一个值 并没有输出语句,所以我们需要在调用外面套一个console.log的控制台输出

写法:
function fn2(a,b){
return a + b;
}
console.log(fn2(6,3));
结果会返回一个9 没问题!

二,变量的作用域
什么是变量的作用域?
也就是说,变量可以访问的区域
2.1 局部变量 ---->只能在局部调用的变量
比如在函数里面创建的变量 只能在函数里面访问得到
如 我们在函数里面定义一个变量 ,然后在全局去访问这个变量会不会访问得到
function fn(){
var x = 666;
}
console.log(x);
他会显示如下图 x is not defined 找不到这个变量x

他只能写在自己的函数体内可以生效
function fn(){
var x = 666;
console.log(x);
}
fn();
2.2全局变量
全局变量分为显示全局变量和隐式全局变量
那么什么是显示全局变量和隐式全局变量呢?
显示全局变量就是有var声明的变量 并且在全局都可以访问的到
而隐式全局变量就是前面没有var声明的变量 在函数体内被调用过之后才可以转换为全局变量
- 显示全局变量
var xx = "爷爷"; //在函数体在定义这种的变量就是全局变量
function fn4(){
console.log(xx);
}
fn4();
那么下面这种写法 看看他会输出爷爷还是输出50呢?
var xx = "爷爷"; //定义一个全局变量爷爷
function fn4(){
var xx = 50; //定义一个局部变量50
console.log(xx);
}
fn4();

结果为什么是50呢???
注意点 因为 //他会优先在当前作用域查找变量 如果当前找不到他会逐层向外查找
所以他会输出50
- 隐式全局变量 在函数体内部没有通过var声明的变量
function fn(){
xxx = 10;
yyy = 20;
}
console.log(yyy)

这样是调用不到的 只有当函数调用完一次 变量才变成全局变量 可以访问到,
function fn(){
xxx = 10;
yyy = 20;
}
fn();
console.log(yyy)

三,变量的生命周期
什么是变量的声明周期
说白了就是这些变量怎么来的 怎么没得。
都是从被声明开始
全局 结束:当页面关闭以后删除
局部 结束:当前程序运行完之后删除
//尽量使用局部变量 全局多占内存
- 释放内存
如何释放内存,有两种方法
1.delete()(手动删除 不是所有的牛奶都叫特仑苏 不是所有的变量都可以被删除)
var h = 1;
delete(h);
console.log(h);
//还是可以输出出来 通过var声明的显示全局变量 不可以delete删除

如果是不加var声明的 可以被删除
j = 1;
delete(j);
console.log(j); //is not defined 可以被删除

2.null 可以删除var 声明的变量
var x = 2;
x= null;
console.log(x);

扩展 变量和函数的声明提升
var声明的变量他会直接拿在上面,他会先取变量
1. 变量的声明提升
console.log(x);
var x = 10; //undefined
//会优先把所有的变量提升到顶部
2.函数的声明提升
可以先调用 然后再写函数
网友评论