function innerFunction() {
console.log(privateVariable); // 内部引用外部变量
}
return innerFunction;
}
const myFunction = outerFunction();
myFunction(); // 输出 “私有变量”
// 例2
function makeAdder(x) {
return function(y) {
return x + y;
}
}
const add5 = makeAdder(5);
add5(2); // 7
`innerFunction` 可以访问 `outerFunction` 中定义的 `privateVariable` 变量,但外部的代码无法直接访问 `privateVariable`。
### 🍀二、高阶函数
高阶函数是指接受一个或多个函数作为参数,并返回一个函数的函数。通过使用高阶函数,你可以将代码复用最大化,并提高代码的可读性和可维护性。例如:
function double(num) {
return num * 2;
}
function triple(num) {
return num * 3;
}
function apply(fn, num) {
return fn(num);
}
console.log(apply(double, 5)); // 输出 10
console.log(apply(triple, 5)); // 输出 15
`apply` 是一个高阶函数,它接受一个函数和一个数字作为参数,并调用该函数并返回结果。通过使用 `apply` 函数,我们避免了重复书写代码。
### 🍀三、原型链
原型链是JavaScript面向对象编程的基础之一。每个JavaScript对象都有一个原型对象,通过原型链,我们可以实现对象之间的继承关系。例如:
function Animal(name, sound) {
this.name = name;
this.sound = sound;
}
Animal.prototype.makeSound = function() {
console.log(this.sound);
};
function Dog(name, sound) {
Animal.call(this, name, sound);
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.bark = function() {
console.log(“Woof!”);
};
const myDog = new Dog(“Buddy”, “Bark”);
myDog.makeSound(); // 输出 “Bark”
myDog.bark(); // 输出 “Woof!”
`Animal` 是一个构造函数,它有一个 `makeSound` 方法,`Dog` 构造函数继承自 `Animal` 构造函数,并添加了一个 `bark` 方法。通过使用原型链,我们实现了 `Dog` 对象继承了 `Animal` 对象的属性和方法。
### 🍀四、函数柯里化
函数柯里化是指将一个接收多个参数的函数转换成一系列只接收一个参数的函数。通过使用函数柯里化,你可以简化函数的调用方式,并提高代码的可读性和可维护性。
function multiply(a, b) {
return a * b;
}
function curry(fn) {
return function curried(…args) {
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
return function(…moreArgs) {
return curried.apply(this, args.concat(moreArgs));
};
}
};
}
const curriedMultiply = curry(multiply);
console.log(curriedMultiply(2)(3)); // 输出 6
`curry` 是一个函数,它接受一个函数作为参数,并返回一个新的函数。通过使用 `curry` 函数,我们将 `multiply` 函数转换成了一个只接收一个参数的函数,在调用时可以更加方便和灵活。
### 🍀五、函数节流和函数防抖
函数节流和函数防抖是两种常用的性能优化技巧。
函数**节流**指在一定时间内只执行一次函数,
函数**防抖**指在一定时间内只执行最后一次函数。
两种都可以帮助我们避免频繁触发函数,从而提高代码的性能和用户体验。
// 节流
function throttle(fn,waitTime) {
let timer;
return function(…args) {
if (!timer) {
timer = setTimeout(() => {
fn.apply(this, args);
timer = null;
}, waitTime);
}
};
}
// 防抖
function debounce(fn, waitTime) {
let timer;
return function(…args) {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, args);
}, waitTime);
};
}
const throttledFunction = throttle(() => console.log(“Throttled function”), 1000);
const debouncedFunction = debounce(() => console.log(“Debounced function”), 1000);// 在短时间内多次调用函数
for (let i = 0; i < 10; i++) {
throttledFunction();
debouncedFunction();
}
// 输出
// Throttled function
// Debounced function
throttle 和 debounce 函数都接受一个函数和一个等待时间作为参数,并返回一个新的函数。通过使用这两种技巧,我们可以避免在短时间内多次触发函数,从而提高代码性能和用户体验。
### 🍀六、Promise
Promise是一种用于异步编程的解决方案,它用于处理异步操作并返回结果。Promise有三种状态:pending、resolved和rejected,分别表示异步操作正在进行、操作已成功完成和操作未成功完成。
function fetchData() {
return new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
const data = { name: “John”, age: 30 };
if (data) {
resolve(data);
} else {
reject(new Error(“Failed to fetch data”));
}
}, 1000);
});
}
fetchData().then(data => console.log(data)).catch(error => console.error(error));
fetchData 函数返回一个Promise对象,并在异步操作完成后通过 `resolve` 或 `reject` 方法来返回结果或错误信息。通过使用`then` 和 `catch`方法,我们可以获取异步操作的结果并进行处理。
### 🍀七、async/await
async/await是一种基于Promise的异步编程解决方案,它提供了更加简洁和直观的方式来处理异步操作。async函数用于声明一个异步函数,而await用于等待一个异步操作的结果。
function fetchData( {
return new Promise((resolve, reject) => {
// 异步操作
setTimeout(() => {
const data = { name: “John”, age: 30 };
if (data) {
resolve(data);
} else {
reject(new Error(“Failed to fetch data”));
}
}, 1000);
});
}
async function getData() {
try {
const data = await fetchData();
console.log(data);
} catch (error) {
console.error(error);
}
}
getData();
基础学习:
前端最基础的就是 HTML , CSS 和 JavaScript 。
网页设计:HTML和CSS基础知识的学习
HTML是网页内容的载体。内容就是网页制作者放在页面上想要让用户浏览的信息,可以包含文字、图片、视频等。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。
动态交互:JavaScript基础的学习
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。
CSS样式是表现。就像网页的外衣。比如,标题字体、颜色变化,或为标题加入背景图片、边框等。所有这些用来改变内容外观的东西称之为表现。
[外链图片转存中…(img-TbbIvZQw-1714636750201)]
动态交互:JavaScript基础的学习
JavaScript是用来实现网页上的特效效果。如:鼠标滑过弹出下拉菜单。或鼠标滑过表格的背景颜色改变。还有焦点新闻(新闻图片)的轮换。可以这么理解,有动画的,有交互的一般都是用JavaScript来实现的。