匿名函数
匿名函数是指没有名字的函数
具名函数是指有名字的函数
语法格式
// 具名函数
语法格式:
function 函数名(){ }
// 匿名函数
语法格式:
function () {}
匿名函数不能直接用,一般会将他 【赋值】给某个变量,并且这个变量的名字相当于函数的名字。
例:
let aa = function () {
alert('匿名函数')
}
匿名函数的调用
let aa = function () {
alert('匿名函数的调用')
}
aa()
匿名函数和具名函数的区别
相同点:
都可以有参数、返回值。
let bb = function (x,y) {
return x + y;
};
let z = bb(10,5);
不同点:
具名函数存在着函数提升,函数提升是指可以在声明函数之前就去调用它。
fn()
function fn() {
console.log("具名函数有函数提升,可以先调用再声明")
}
匿名函数一般赋值给变量使用时,也叫函数表达式,不存在变量提升。
// 函数表达式
// nn()// 写在前面会报错
function nn() {
console.log("具匿名函数没有函数提升,不可以先调用再声明")
}
nn()// 具匿名函数没有函数提升,不可以先调用再声明
立即执行函数
所谓立即执行函数(自执行函数)
函数的定义和调用可以认为是同时进行。
// 写法1
(function cc() {
console.log('立即执行函数/自执行函数');
})(); // 立即执行函数/自执行函数
// 写法2
(function dd() {
console.log('另一个立即执行函数/自执行函数');
}()); // 另一个立即执行函数/自执行函数
立即执行函数可以传参数
(function (x) { // 形参
consloe.log(x);
})(10); // 实参
(function (x,y) { // 形参
consloe.log(x + y);
})(10,1); // 实参
立即执行函数可以有返回值
let z = (function (x,y) { // 形参
consloe.log(x + y); // 15
renturn x + y;
})(10,1); // 实参
consloe.log(z); // 15
在使用立即执行函数时,需要注意必须要添加分号或其他运算符号。
x = 10;
(5 + 2) * 2
在大多数情况下可以省略分号(结束符),但是在使用立即执行函数时不可以省略。
立即执行函数用法:可以解决或者避免变量的污染。
变量污染:如果某个人定义了一个变量,另外一个人将变量的值改动了,变量的值改动,执行逻辑会出现错误。
let i = 0;
// ...
// for()
// 中间是其他代码
// ...
i = 20;
// 上述代码产生了变量污染
(function () {
// 局部作用域
let i = 0;
})();
(function () {
// 局部作用域
let i = 20;
})();
上述变量之间互相不影响,避免变量污染。
用法:
首页
// A写了一个a.js
// B写了一个b.js
<script>
<script src='./a.js'></script>
<script src='./b.js'></script>
</script>
a.js
// let i = 0
// while(i < 10) {
// console.log(i)
// i++
// }
// i变量是全局变量
// // 通过立即执行函数解决变量污染
(function(){
let i = 0;
while(i < 10) {
console.log(i);
i++;
};
})();
// i变量是函数作用域
// 通过普通函数解决变量污染
// 先定义再调用
function A() {
let i = 0;
while(i < 10) {
console.log(i);
i++;
};
}
A();
b.js
// let i = 20;
// console.log(i);
// i变量是全局变量
// 通过立即执行函数解决变量污染
(function(){
let i = 20;
console.log(i);
})();
// i变量是函数作用域
// 通过普通函数解决变量污染
// 先定义再调用
function B() {
let i = 20;
console.log(i);
}
B();
对象
对象是JS当中的数据类型
数据类型(基础类型):数值、字符、布尔、undefined
对象是复杂的数据类型。
语法:
数组的语法格式为:[] // 数组字面量
字符串的语法格式为:'' “” `` // 字符串字面量
对象的语法格式为:{} // 对象字面量
let t = {} // 空白对象
// 语法
let o = {
属性1: 值1,
属性2: 值2,
属性n: 值n,
}
let user = {
name: '黄昏',
age: 28,
gender: '男',
};
console.log(user);
对象的使用:
对象名[属性名]
// user[name] // 不加''会被识别成变量
console.log(user['name']); // 黄昏
对象名.属性名
nsole.log(user.age); // 28