// 回调的函数function callback(data) {}// 逻辑函数function func(callback) { // 函数回调 if (callback) callback(data);}// 函数回调的本质:在一个函数中(调用函数),当满足一定条件,调用参数函数(回调函数)// 回调函数作为调用函数的参数传入// 回调函数通过参数将调用还是内部数据传出
// 回调的函数
function callback(data) {}
// 逻辑函数
function func(callback) {
// 函数回调
if (callback) callback(data);
}
// 函数回调的本质:在一个函数中(调用函数),当满足一定条件,调用参数函数(回调函数)
// 回调函数作为调用函数的参数传入
// 回调函数通过参数将调用还是内部数据传出
function outer() { var data = {} function inner() { return data; } return inner;}// 闭包目的:不允许提升变量作用域时,该函数的局部变量需要被其他函数使用// 闭包本质:函数的嵌套,内层函数称之为闭包// 闭包的解决案例:①影响局部变量的生命周期,持久化局部变量;②解决变量污染
function outer() {
var data = {}
function inner() {
return data;
return inner;
// 闭包目的:不允许提升变量作用域时,该函数的局部变量需要被其他函数使用
// 闭包本质:函数的嵌套,内层函数称之为闭包
// 闭包的解决案例:①影响局部变量的生命周期,持久化局部变量;②解决变量污染
.html文件<ul> <li>列表项</li> <li>列表项</li> <li>列表项</li></ul>
.html文件
<ul>
<li>列表项</li>
</ul>
.js文件var lis = document.querySelector('li');for (var i = 0; i < lis.length; i++) { lis[i].onclick = function () { // 打印列表项的索引 console.log(i); }}// 变量污染// 获取局部作用域解决// 闭包解决// 对象属性解决
.js文件
var lis = document.querySelector('li');
for (var i = 0; i < lis.length; i++) {
lis[i].onclick = function () {
// 打印列表项的索引
console.log(i);
// 变量污染
// 获取局部作用域解决
// 闭包解决
// 对象属性解决
var obj = {}; | var obj = new Object();// 属性obj.prop = "";// 方法obj.func = function () {}// 删除属性与方法delete obj.propdelete obj.func
var obj = {}; | var obj = new Object();
// 属性
obj.prop = "";
// 方法
obj.func = function () {}
// 删除属性与方法
delete obj.prop
delete obj.func
var dict = {name: "zero", age: 18}
var dict = {"my-name": "zero", fn: function () {}, fun () {}}
dict.name | dict["my-name"] | dict.fn()
function People(name, age) { this.name = name; this.age = age; this.eat = function () { return 'eat'; }}
function People(name, age) {
this.name = name;
this.age = age;
this.eat = function () {
return 'eat';
// 父级function Sup(name) { this.name = name; this.fn = function () { console.log('fn class'); }}// 原型console.log(Sup.prototype);console.log(sup.__proto__);// 子级function Sub(name) { // 继承属性 Sup.call(this, name);}// 继承方法Sub.prototype = new Sup;// 创建子级对象var sub = new Sub("subClass");// 使用属性console.log(sub.name);// 使用方法sub.fn();// 指向自身构造函数Sub.prototype.constructor = Sub;
// 父级
function Sup(name) {
this.fn = function () {
console.log('fn class');
// 原型
console.log(Sup.prototype);
console.log(sup.__proto__);
// 子级
function Sub(name) {
// 继承属性
Sup.call(this, name);
// 继承方法
Sub.prototype = new Sup;
// 创建子级对象
var sub = new Sub("subClass");
// 使用属性
console.log(sub.name);
// 使用方法
sub.fn();
// 指向自身构造函数
Sub.prototype.constructor = Sub;
// 父类class People { // 构造器 constructor (name, age) { this.name = name; this.age = age; } // 实例方法 eat () { console.log('吃吃吃'); } // 类方法 static create () { console.log('诞生'); }}// 子类class Student extends People { constructor (name, age) { // super关键词 super(name, age) }}
// 父类
class People {
// 构造器
constructor (name, age) {
// 实例方法
eat () {
console.log('吃吃吃');
// 类方法
static create () {
console.log('诞生');
// 子类
class Student extends People {
// super关键词
super(name, age)
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728