pojin (ID: 1)
头衔:论坛坛主
等级:究级天王[荣誉]
积分:1301
发帖:99 篇
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
发帖:99 篇
来自:保密
注册:2022-08-28 23:20:57
造访:2025-03-23 21:18:24
[ 第 1 楼 ]
回复

JavaScript语言不断发布一些新特性,感觉要上天的节奏啊。本文搜集整理了一些它的高级概念和用法,来看看你是否都了解?代码这样写是不是更优雅了?
1. 闭包
闭包是Javascript中的一项重要技术,内部函数始终可以访问其外部函数的变量和参数,即使在外部函数返回后也是如此。我们使用闭包来保护我们不想向外部范围公开的数据。
//
<button onclick=”increaseCounter()”>Increase Counter</button>
//1. 全局变量,变量会被意外修改
let counter = 0;
function increaseCounter() {
counter++;
}
//2. 局部变量,每次调用都重置为0
function increaseCounter() {
let counter = 0;
counter++;
}
//3. 闭包函数,符合要求
const increaseCounter = (function() {
let counter = 0;
return function() {
counter = counter + 1;
console.log(counter);
};
})();
2. 函数绑定
在上下文丢失时,this将无法被确定,可以通过函数绑定解决。
// 1. 与预期不符,得到undefined
let book = {
title: ‘Learn JavaScript',
printTitle() {
console.log(`Book's title: ${this.title}`);
}
}
setTimeout(book.printTitle, 1000); // Book's title: undefined
// 2. 利用函数绑定,符合预期
let book = {
title: ‘Learn JavaScript',
printTitle() {
console.log(`Book's title: ${this.title}`);
}
}
let printTitle = book.printTitle.bind(book);
setTimeout(printTitle, 1000); // Book's title: JavaScript
3.使用命名空间
使用命名空间可以防止代码冲突。
// 1. move、jump函数在animal命名空间下,需要通过animal.move()来调用
let animal = {
move: () => {
console.log(‘Move!');
},
jump: () => {
consle.log(‘Jump!');
}
};
// 2. 真实项目中,可能会按如下方式使用命名空间
if (typeof APP === "undefined") {
APP = {};
APP.ANIMAL = {};
}
APP.ANIMAL.move = () => {
console.log(‘Move');
};
APP.ANIMAL.jump = () => {
console.log(‘Jump');
};
APP.ANIMAL.move(); // Move
APP.ANIMAL.jump(); // Jump
4. 判断属性是否存在
使用in关键字可以判断对象中是否存在某个属性。
const person = {
id: "123",
name: "张三"
}
console.debug("id" in person) //true
console.debug("age" in person) //false
5. 解构赋值
利用解构赋值表达式,可以将属性、值从对象、数组中取出,赋值给其它变量,非常方便。
const { address: addressLine } = { address: "长安街20号", postcode: "518118" };
console.warn(addressLine); // 长安街20号
const [first, second] = [1, 2, 3, 4]
console.warn(first, second) // 1 2
//动态解构
const extractKey = "postcode"
const { [extractKey]: youbian } = { address: "长安街20号", postcode: "518118" };
console.log(youbian) //518118
1. 闭包
闭包是Javascript中的一项重要技术,内部函数始终可以访问其外部函数的变量和参数,即使在外部函数返回后也是如此。我们使用闭包来保护我们不想向外部范围公开的数据。
//
<button onclick=”increaseCounter()”>Increase Counter</button>
//1. 全局变量,变量会被意外修改
let counter = 0;
function increaseCounter() {
counter++;
}
//2. 局部变量,每次调用都重置为0
function increaseCounter() {
let counter = 0;
counter++;
}
//3. 闭包函数,符合要求
const increaseCounter = (function() {
let counter = 0;
return function() {
counter = counter + 1;
console.log(counter);
};
})();
2. 函数绑定
在上下文丢失时,this将无法被确定,可以通过函数绑定解决。
// 1. 与预期不符,得到undefined
let book = {
title: ‘Learn JavaScript',
printTitle() {
console.log(`Book's title: ${this.title}`);
}
}
setTimeout(book.printTitle, 1000); // Book's title: undefined
// 2. 利用函数绑定,符合预期
let book = {
title: ‘Learn JavaScript',
printTitle() {
console.log(`Book's title: ${this.title}`);
}
}
let printTitle = book.printTitle.bind(book);
setTimeout(printTitle, 1000); // Book's title: JavaScript
3.使用命名空间
使用命名空间可以防止代码冲突。
// 1. move、jump函数在animal命名空间下,需要通过animal.move()来调用
let animal = {
move: () => {
console.log(‘Move!');
},
jump: () => {
consle.log(‘Jump!');
}
};
// 2. 真实项目中,可能会按如下方式使用命名空间
if (typeof APP === "undefined") {
APP = {};
APP.ANIMAL = {};
}
APP.ANIMAL.move = () => {
console.log(‘Move');
};
APP.ANIMAL.jump = () => {
console.log(‘Jump');
};
APP.ANIMAL.move(); // Move
APP.ANIMAL.jump(); // Jump
4. 判断属性是否存在
使用in关键字可以判断对象中是否存在某个属性。
const person = {
id: "123",
name: "张三"
}
console.debug("id" in person) //true
console.debug("age" in person) //false
5. 解构赋值
利用解构赋值表达式,可以将属性、值从对象、数组中取出,赋值给其它变量,非常方便。
const { address: addressLine } = { address: "长安街20号", postcode: "518118" };
console.warn(addressLine); // 长安街20号
const [first, second] = [1, 2, 3, 4]
console.warn(first, second) // 1 2
//动态解构
const extractKey = "postcode"
const { [extractKey]: youbian } = { address: "长安街20号", postcode: "518118" };
console.log(youbian) //518118

