Js学习小结(二)函数
2021-04-25 23:29
标签:导致 打印 不能 结束 使用 情况 作用 修改 pre 结果: 声明前后都可调用 结果: 只能先声明后调用 以后更新 1. 在JS中函数自身的作用域在声明的地方,而不是在调用的地方 2. 在Js中函数是被称为第一等公民,因为函数是js的一个特殊的数据类型, 结果: 闭包就是一个函数,这个函数能够访问其他函数的作用域中的变量。 闭包的作用: 1.保留作用域 2.函数内外的桥梁 结果: 原因: Js学习小结(二)函数 标签:导致 打印 不能 结束 使用 情况 作用 修改 pre 原文地址:https://www.cnblogs.com/fpgz99810/p/12227535.html(一)声明函数
function f1(){
...
}
var f2 = function(){
...
}
var f3 = new function();
(二)调用函数
f1();
function f1(){
console.log(111);
}
f1();
111
111
f2();
var f2 = function(){
console.log(222);
}
f2();
异常:f2不是一个方法(原因:js的变量和函数提升)
222
(三)函数的形参和实参
(四)回调函数
JS是以值的形式来处理函数的,那么就促成JS的回调函数。 //1.声明赋值变量a
var a = 1;
function f1(f){
//3.进入f1()方法
console.log(f);
//4.声明赋值变量a
var a = 2;
//5.执行f()方法,也就是f2()【可以理解为指针或引用】,并寻找f2()声明处并执行
f();
}
function f2(){
//6.执行f2(),寻找变量a(先找到全局变量a,所以没有找到局部变量a,至于它为什么没有套娃执行和找不到局部a,这是js的运行原理,也就是js作用域链)
console.log(a);
}
//2.将函数名f2传入函数f1内
f1(f2);
[Function: f2]
1
(五)函数闭包
//0.声明赋值全局a
var a = 2;
//0.声明方法f1()
function f1(){
//1.声明赋值局部a
var a = 1;
//2.声明方法f2()
function f2(){
//6.发现a,在作用域链中寻找a,首先找到了f1()的局部a,并打印
console.log(++a);
}
//3.终止f1运行并返回f2的指针
return f2;
}
//0.声明并运行f1()
var f = f1();//4.f能够引用f2()方法,因为f还保留f2()的指针,所以f1()留在内存的数据暂且不能销毁。
f();
//5.执行f2(),因为f还保留f2()的指针,所以f1()留在内存的数据暂且不能销毁。
f();
//6.同上,因为始终保存着f1()的数据,所以以上修改的f1()的a一直都是一个值。
f();
//7.同上
f();
//8.同上
2
3
4
5
由于f1的运行结果是返回f2,那么又由于作用域链及函数自身作用域的问题,导致f1运行结束后,不能销毁变量,因此形成了闭包。
上一篇:JS事件