JavaScript三大重点同步异步与作用域和闭包及原型和原型链详解

一、同步异步

JavaScript代码的执行分为同步和异步两种方式。同步是指代码执行的顺序和书写顺序一致,代码执行时必须等待上一行执行完成,才执行下一行。异步是指代码执行的顺序和书写顺序不一致,可以在等待某些操作完成时执行其他代码,操作完成时再回调执行。

JavaScript的异步编程实现有两种方式:
1. 回调函数
2. Promise

其中Promise是回调函数的升级版,使用Promise可以处理回调地狱的问题,代码更加易读易维护。

示例1:使用回调函数实现异步操作

function ajax(url, callback){
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url);
    xhr.onreadystatechange = function(){
        if(xhr.readyState === 4 && xhr.status === 200){
            callback(xhr.responseText);
        }
    };
    xhr.send();
}

ajax('https://api.github.com/users/maoyuwan', function(data){
    console.log(data);
});

示例2:使用Promise实现异步操作

function ajax(url){
    return new Promise(function(resolve, reject){
        const xhr = new XMLHttpRequest();
        xhr.open('GET', url);
        xhr.onreadystatechange = function(){
            if(xhr.readyState === 4){
                if(xhr.status === 200){
                    resolve(xhr.responseText);
                }else{
                    reject();
                }
            }
        };
        xhr.send();
    });
}

ajax('https://api.github.com/users/maoyuwan').then(function(data){
    console.log(data);
}).catch(function(){
    console.log('error');
});

二、作用域和闭包

作用域是指一个变量的生命周期和可访问范围。JavaScript的作用域分为全局作用域和函数作用域。闭包是指一个函数可以访问另一个函数内部的变量,甚至访问外部函数的变量,形成一个封闭的作用域。

示例1:全局作用域

var a = 10;

function foo(){
    console.log(a); // 10
}

foo();

示例2:函数作用域及闭包

function foo(){
    var a = 10;
    function bar(){
        console.log(a); // 10
    }
    return bar;
}

var test = foo();
test();

三、原型和原型链

JavaScript中的继承是通过原型链来实现的,每个对象都包含一个 proto 属性,指向它的原型对象,而原型对象也有 proto 属性,指向它的父级原型对象,这样就构成了一个链式结构。

示例1:原型继承

function Animal(name){
    this.name = name;
}

Animal.prototype.sayName = function(){
    console.log(this.name);
}

function Dog(name, voice){
    Animal.call(this, name);
    this.voice = voice;
}

Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

Dog.prototype.sayVoice = function(){
    console.log(this.voice);
}

var dog = new Dog('小黑', '汪汪');
dog.sayName(); // 小黑
dog.sayVoice(); // 汪汪

示例2:原型链

function Person(){
    this.name = 'Tom';
}

Person.prototype.getName = function(){
    console.log(this.name);
}

function Student(){
    this.age = 20;
}

Student.prototype = new Person();
Student.prototype.getAge = function(){
    console.log(this.age);
}

var student = new Student();
student.getName(); // Tom
student.getAge(); // 20

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript三大重点同步异步与作用域和闭包及原型和原型链详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • JS中sort函数排序用法实例分析

    下面是JS中sort函数排序用法实例分析的详细攻略。 什么是sort函数排序? sort()是JavaScript数组的一个方法,用于对数组元素进行排序。 sort()方法不创建新数组,而是直接修改原始数组的顺序。 sort()方法默认按字母顺序排序,如果是数字需要先将其转为字符串。 sort()方法可以接受一个函数作为参数,该函数指定排序规则。 sort函…

    JavaScript 2023年5月28日
    00
  • Egg Vue SSR 服务端渲染数据请求与asyncData

    Egg Vue SSR 是一个基于 Egg.js 和 Vue.js 的服务端渲染项 目,它能够将 Vue.js 组件在服务端渲染完成之后再返回给客户端,在一定程度上可以提高页面的首屏渲染速度和搜索引擎的爬取效果。为了更好的支持服务端渲染,Egg Vue SSR 提供了异步数据请求方法 asyncData。 asyncData 是在服务端执行的方法,而非在浏览…

    JavaScript 2023年6月11日
    00
  • 利用jquery制作滚动到指定位置触发动画

    介绍 利用jQuery制作“滚动到指定位置触发动画”可以为网站增添一份优雅。本攻略将介绍如何利用jQuery添加让元素滚动到指定位置时触发动画的代码。 步骤 步骤 1:添加jQuery链接 首先需要在 HTML 文件中添加 jQuery 链接。这里我们使用的是来自 jQuery 官网的链接: <script src="https://code…

    JavaScript 2023年6月11日
    00
  • HTML5 本地存储之如果没有数据库究竟会怎样

    这里是 “HTML5 本地存储之如果没有数据库究竟会怎样” 的攻略。 什么是本地存储 本地存储是Web开发中比较重要的一个概念,它可以在不使用服务器数据库的情况下,让我们的Web应用程序缓存数据。HTML5 中的本地存储提供了两种方式:localStorage 和 sessionStorage。 localStorage 存储的数据是永久性的,而 sessi…

    JavaScript 2023年6月11日
    00
  • Vue联动Echarts实现数据大屏展示

    下面是“Vue联动Echarts实现数据大屏展示”的完整攻略。 一、什么是Vue联动Echarts Vue是一款流行的前端框架,Echarts是一款流行的数据可视化库。Vue联动Echarts的实现,就是将Vue与Echarts进行结合,实现数据的动态展示和交互。 二、如何实现Vue联动Echarts 1. 引入Echarts 在项目中引入Echarts库,…

    JavaScript 2023年6月11日
    00
  • js中如何对url进行编码和解码

    在 JavaScript 中,有两种方式可以对 URL 进行编码和解码,分别是 encodeURI() 和 encodeURIComponent()。 encodeURI() encodeURI() 方法用于将 URI (Uniform Resource Identifier) 进行编码,但是不会对一些特殊字符 (;,/?:@&=+$#) 进行编码。…

    JavaScript 2023年5月20日
    00
  • 帮你提高开发效率的JavaScript20个技巧

    帮你提高开发效率的JavaScript 20个技巧攻略 1. 使用模板字面量 模板字面量是ES6新特性中之一,它使用反引号 ` 来包裹字符串模板,可以非常方便地插入变量、表达式、换行符及其它一些字符。使用模板字面量可以更加优雅简洁地构建字符串,提高开发效率。 例如,使用模板字面量来生成HTML代码: const div = ` <div class=&…

    JavaScript 2023年5月18日
    00
  • javascript创建函数的20种方式汇总

    首先,我们需要明确“JavaScript创建函数的20种方式”是指通过不同的方法来创建JavaScript函数。下面将介绍其中的20种方式。 1.使用函数声明方式 函数声明方式就是使用function关键字来声明和定义函数。例如: function myFunction() { //函数体 } 2.使用函数表达式方式 函数表达式方式是使用函数字面量来创建函数…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部