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

yizhihongxing

一、同步异步

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 精确统计网站访问量的实例代码

    基于你的要求,以下是详细讲解 “JS 精确统计网站访问量的实例代码” 的完整攻略。 1. 思路分析 首先,了解如何统计网站的访问量是必要的。一种通用的方式是记录每次请求,但是这将占用大量的存储空间,也会影响系统的性能。 另一种更好的方式是使用浏览器中的 cookie 来跟踪唯一访问者。 我们可以使用 JavaScript 脚本来创建一个 cookie,每次页…

    JavaScript 2023年6月11日
    00
  • JavaScript属性操作

    JavaScript属性操作 在JavaScript中,我们可以使用属性来表示对象的特征及状态。属性操作是常见的JavaScript编程任务,涉及到访问、设置、删除属性等任务。本文将介绍JavaScript属性操作的基本知识以及几个例子。 访问属性 我们可以使用点号或方括号来访问JavaScript对象的属性。点号方式是JavaScript语法中更常用的一种…

    JavaScript 2023年5月18日
    00
  • JS难点同步异步和作用域与闭包及原型和原型链详解

    JS难点同步异步和作用域与闭包及原型和原型链详解攻略 JavaScript在前端开发中非常重要,但其语言特性较为复杂,其中同步异步和作用域与闭包及原型和原型链都是前端开发人员需要掌握的难点。下面我们就来详细讲解这三个难点的知识点及应用。 同步异步 在JS中同步执行和异步执行是最常见的两种执行方式。同步执行即是代码按照写入顺序依次执行,每一行代码等待上一行代码…

    JavaScript 2023年6月10日
    00
  • NodeJS有难度的面试题(能答对几个)

    下面我会详细讲解一下 “NodeJS有难度的面试题(能答对几个)” 的完整攻略。 1. Node.js的基础知识 在面试过程中,面试官通常会问到一些基础的 Node.js 知识,例如: Node.js 是什么? npm 是什么? 有什么用? 如何在 Node.js 中使用第三方模块? 什么是模块? 如何定义并导入模块? 针对这些问题,你需要先通过自学文档以及…

    JavaScript 2023年5月28日
    00
  • JavaScript中Math.SQRT2属性的使用详解

    JavaScript中Math.SQRT2属性的使用详解 一、Math.SQRT2属性是什么? Math.SQRT2属性是JavaScript语言中的一个预定义常量,它表示的是2的平方根。它的值约等于1.4142135623730951。这个属性会与Math对象绑定,因此可以使用Math.SQRT2来访问它。 二、Math.SQRT2属性的使用 1.使用Ma…

    JavaScript 2023年6月10日
    00
  • ES6中async函数与await表达式的基本用法举例

    下面是关于ES6中async函数与await表达式的基本用法及示例说明的完整攻略。 什么是async函数与await表达式 在ES6中,async函数是用来简化异步代码的一种新语法,它是Generator函数的语法糖。async函数返回一个Promise对象,可以使用then方法添加回调函数。同时,async函数内部可以使用await表达式,它用于等待一个P…

    JavaScript 2023年5月27日
    00
  • Javascript注入技巧

    Javascript注入技巧 Javascript注入是一种将代码注入到Web页面中的攻击技巧,它可以通过一些手段在Web页面中运行恶意代码。攻击者可以利用这种技术窃取用户的敏感信息、篡改页面内容、运行恶意程序等,对网站和用户造成不良影响。下面是一些Javascript注入的技巧和示例说明。 基础技巧 1. 隐藏字段注入 隐藏字段注入是一种简单的注入技巧,攻…

    JavaScript 2023年5月18日
    00
  • 一个基于vue3+ts+vite项目搭建初探

    下面是关于“一个基于vue3+ts+vite项目搭建初探”的完整攻略。 1. 安装vite 首先,我们需要安装vite,可以使用npm或yarn进行安装,输入以下命令: npm install -g vite # npm安装 # 或 yarn global add vite # yarn安装 这里我们选择使用npm进行安装。 2. 创建项目 在一个合适的目录…

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