<script>
/* 1. 匿名函数定义:没有名字的函数 (注意一个页面只允许一个立即执行匿名函数) */
// 声明一个普通函数, 函数的名字叫fn
function fn() {
console.log(1);
}
// 然后将函数的名字去掉就是匿名函数
// function () {
// console.log(2);
// }
// 到此,你会发现单独运行一个匿名函数,由于不符合语法要求,报错啦!解决方法只需要给匿名函数包裹一个括号即可:
//匿名函数在其它应用场景括号可以省略
// (function () {
// // 由于没有执行该匿名函数 所以不会执行匿名函数体内的语句
// console.log(3);
// })
// 如果需要执行匿名函数 在匿名函数后面加上一个括号即可立即执行
// (function () {
// console.log('立即执行匿名函数');
// })()
// 传值 的话 参数直接写到括号里
// (function (str) {
// console.log(str + "吧");
// })('网')
/* 2.匿名函数的应用场景 */
// 2-1. 事件
const sub = document.querySelector('#sub')
sub.onclick = function () {
alert('我被点击了!')
}
// 2-2. 对象
const obj = {
name: '网吧',
age: 11,
fn: function () {
return `我叫${this.name}, 今年${this.age}岁!`
}
}
console.log(obj.fn());
// 2-3. 函数表达式
// 将匿名函数赋值给变量fn
const fun = function () {
return "我是一只小小小小留下,怎么飞也飞不高!"
}
//调用方式与调用普通函数一样
console.log(fun());
// 2-4. 回调函数
setInterval(function () {
console.log("我其实是一个回调函数,每次1秒钟会被执行一次");
}, 1000)
// 2-5 返回值
// 将匿名函数作为返回值
function fn() {
return function () {
return '网啊是啥!'
}
}
const box = fn()
console.log(box());
// 2-6 模仿块级作用域
// 块级作用域, 有的地方称为私有作用域。 JavaScript中是没有块级作用域的, 例如:
if (1 == 1) { //条件成立,执行if代码块语句。
var a = 12; //a为全局变量
}
console.log(a); //12
for (var i = 0; i < 3; i++) {
console.log(i);
}
console.log(i); //4
// if(){}for(){} 等没有自己的作用域。如果有,出了自己的作用域,声明的变量就会立即被销毁了。但是咱们可以通过匿名函数来模拟块级作用域:
(function () {
//这里是我们的块级作用域(私有作用域)
})();
// 尝试块级作用域:
function fn() {
(function () {
var la = "啦啦啦!";
})();
console.log(la); //报错---la is not defined
}
fn();
/*
匿名函数的作用:
1、通过匿名函数可以实现闭包,关于闭包在后面的文章中会重点讲解。在这里简单介绍一下:
闭包是可以访问在函数作用域内定义的变量的函数。若要创建一个闭包,往往都需要用到匿名函数。
2、模拟块级作用域,减少全局变量。执行完匿名函数,存储在内存中相对应的变量会被销毁,从而节省内存。
再者,在大型多人开发的项目中,使用块级作用域,会大大降低命名冲突的问题,从而避免产生灾难性的后果。自此开发者再也不必担心搞乱全局作用域了
*/
</script>