函数:
把一坨重复的代码封装,在需要的时候直接调用即可。
作用:
代码的重用
函数也是一种数据类型
<script type="text/javascript">
function f1() {
console.log("嘻嘻嘻嘻嘻")
}
console.log(typeof f1); //function
function f1(fn) {
fn(); //函数调用- 说明fn这个变量中存储的是一个函数
}
function f2() {
console.log("看我看我卡")
}
f1(f2);
</script>
函数作为参数使用
函数可以作为参数使用,如果一个函数作为参数,那么我们可以说这个参数(函数)叫回调函数
只要看到一个函数作为参数使用了,就是回调函数
<script type="text/javascript">
function sayHi(fn) {
console.log("没没没");
fn();
}
function suHay() {
console.log(",啊,啊,")
}
sayHi(suHay);
</script>
函数作为返回值使用
函数可以作为返回值使用
<script type="text/javascript">
function f1() {
console.log("f1函数调用了");
return function() {
console.log("这是函数");
}
}
var f = f1();
f();
</script>
作用域
JS没有块级作用域
全局变量:
(除函数内)声明的变量是var声明的,可以在全局中使用
如果页面不关闭,那么就不会释放,就会占空间,消耗内存
局部变量:
函数内部定义的,外面不能使用
全局作用域:全局变量的使用范围
隐式全局变量:
声明的变量没有var ,就叫隐式全局变量。
全局变量是不能被删除的,但是隐式全局变量是可以被删除的
定义变量使用var是不会被删除的,没有var 是可以被删除的
<script type="text/javascript">
function f1() {
number = 1000;
}
f1();
console.log(number);
var n1 = 10;
n2 = 20;//隐式全局变量
delete n1;//使用var是不会被删除的
delete n2;//把n2删除了
console.log(n1);
console.log(n2);
</script>
预解析
js代码的执行是由浏览器的js解析器来执行的,js解析器解析js代码的时候,分为两个过程
预解析过程:
1.把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
2.把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
3.先提升var,再提升function
<script type="text/javascript">
// var a = 25;
//
// function abc() {
// alert(a);
// console.log(a); //undefined
// var a = 10;
// // 只会提升声明,不会提升赋值
// /* 相当于
// var a;
// console.log(a);
// a = 10;
// */
// }
// abc();
// //访问不了局部变量,
// console.log("值:"+a);//25
// console.log("第一个:"+a());
//
// function a() {
// console.log('aaaaaaaa');
// }
// var a = 1;
// console.log(a);
// 结果:aaaaaaaa
// 预解析.html:30 第一个:undefined
// 预解析.html:36 1
// 相当于 var a;
// a=18;
var a = 18;
// 相当于
/* function f1() {
var b = 9;
console.log(a); //undefined
var a = '123';
}
f1(); */
f1();
function f1() {
var b = 9;
console.log(a); //undefined
var a = '123';
}
</script>
预解析识别:
<script type="text/javascript">
// f1();
// console.log("函数外c:" + c);
// console.log("函数外b:" + b);
// console.log("函数外a:" + a);
//
// function f1() {
// var a = b = c = 9;
// console.log("函数内a:" + a);
// console.log("函数内b:" + b);
// console.log("函数内c:" + c);
// }
f1();//报错
// 案例
var f1 = function() {
console.log(a);
var a = 10;
}
</script>
网友评论