20道JS原理题助你面试一臂之力(必看)

《20道JS原理题助你面试一臂之力(必看)》是一篇介绍 JavaScript 基础知识的面试题攻略文章,共包含20道题目。以下是该文章的完整攻略:

1. 什么是原型链?如何理解原型链?

1.1 定义

原型链是 JS 的一种基本机制,用于实现对象之间的继承。每一个对象都有一个指向另一个对象的指针,称之为原型 prototype。当我们访问一个对象的属性或方法时,如果该对象不存在该属性或方法,则 js 引擎会自动查找该对象的原型指针指向的对象中是否有该属性或方法,如果还不存在,则继续查找原型对象的原型,直到找到 Object.prototype 为止。

1.2 示例

function Person(name,age){
    this.name = name;
    this.age = age;
}
Person.prototype.sayHello = function(){
    console.log(`Hello, my name is ${this.name}.`);
}
let p = new Person('Tom',18);
p.sayHello();

该示例中,我们定义了一个构造函数 Person,它有两个属性:name 和 age。我们给 Person 的原型对象添加了一个方法 sayHello。最后,我们创建了一个 Person 的实例 p,并调用 p 的 sayHello 方法。在调用该方法时,由于 p 对象中并没有定义 sayHello 方法,因此 js 引擎会查找 p 的原型对象中是否有该方法,找到之后进行调用。

2. 什么是 this?this 的指向有什么规律?

2.1 定义

this 关键字指向函数执行时所处的环境对象,具体取决于函数的调用方式。

2.2 规律

  • 直接调用函数:this 指向全局对象 window;
  • 对象方法中调用函数:this 指向该对象;
  • 构造函数中调用:this 指向新创建的对象;
  • apply、call、bind 中调用:this 指向第一个参数传入的对象;
  • 箭头函数中调用无法改变 this 的指向,this 会指向函数定义时所处的作用域。

2.3 示例

let obj = {
    name: 'Tom',
    sayName: function(){
        console.log(this.name);
    }
};
let func = obj.sayName;
func(); // undefined

该示例中,我们定义了一个对象 obj,其中包含一个方法 sayName。我们将 obj 的 sayName 方法赋值给变量 func,并直接调用 func。由于 func 的调用方式是直接调用函数,因此 this 指向全局对象 window。由于 window 对象中没有定义 name 属性,因此返回 undefined。

3. 什么是闭包?闭包有什么作用?

3.1 定义

闭包是指有权访问另一个函数作用域中的变量的函数。在 js 中,所有的函数默认都是闭包,因为它们都可以访问它们外层的作用域。

3.2 作用

闭包的主要作用是:

  • 封装变量:在函数中定义变量时,该变量会被保护在函数作用域中,外部无法访问。
  • 延长变量寿命:当函数执行完毕后,函数中的变量不会被立即销毁,而是等待外部继续访问使用,因此可以延长变量的生命周期。

3.3 示例

function createCounter(){
    let count = 0;
    return function(){
        count++;
        console.log(count);
    }
}
let counter = createCounter();
counter(); // 1
counter(); // 2

该示例中,我们定义了一个函数 createCounter,它返回一个可以计数器的函数。当我们调用 createCounter 函数时,它会返回一个内部函数。该内部函数可以访问外层函数作用域中的 count 变量,并将它自增。我们将 createCounter 返回的函数赋值给变量 counter,便可以使用该函数了。在调用 counter 函数时,它会打印当前的计数器值 count。由于 count 变量被定义在 createCounter 函数中,而不是全局作用域中,因此它只能在 createCounter 函数返回的函数中访问,外部无法直接改变其值,从而达到了封装变量的目的。而且,由于返回的内部函数中使用了 count 变量,该变量并不会在 createCounter 函数执行结束后被销毁,而是可以被 inner 函数访问和修改,从而延长了变量的生命周期。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:20道JS原理题助你面试一臂之力(必看) - Python技术站

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

相关文章

  • javascript实现左右缓动动画函数

    Javascript实现左右缓动动画函数的步骤如下: 1. 缓动函数 缓动函数用于生成一个根据时间不断递减的系数,用于产生缓慢的运动效果。常用的缓动函数有以下几种: linear:匀速运动,即保持恒定的速度,不缓动。 easeIn:加速缓动,即运动开始较慢,然后逐渐加速。 easeOut:减速缓动,即运动开始较快,然后逐渐减速。 easeInOut:先加速后…

    JavaScript 2023年6月10日
    00
  • 深入浅析JavaScript系列(13):This? Yes,this!

    “深入浅析JavaScript系列(13):This? Yes,this!”是一篇关于JavaScript中this关键字的详细讲解的文章。在文章中,我们可以了解到this的实际含义,常见的用法以及使用场景。 什么是this this是一个关键字,用于引用当前上下文中的对象。具体上下文是由函数的执行方式所决定的。可以在函数内部使用this来引用当前对象。th…

    JavaScript 2023年5月18日
    00
  • Javascript技巧之不要用for in语句对数组进行遍历

    首先,对于JavaScript语言的学习者来说,for in语句非常普遍,用于遍历对象的属性。但对于数组而言,则需要使用其他的遍历方式。 为什么不要用for in语句对数组进行遍历呢?这是因为for in语句实际上是用于遍历对象的属性,而在JavaScript中,数组也是对象的一种,所以使用for in语句遍历数组时,会将所有非数字类型的属性也进行遍历,如A…

    JavaScript 2023年5月27日
    00
  • 网站生成静态页面攻略3:防采集策略

    下面我将详细讲解“网站生成静态页面攻略3:防采集策略”的完整攻略。 简介 在互联网时代,网站安全问题越来越受到重视。作为网站开发者,我们需要考虑如何保护网站的信息,防范一些不法分子利用各种手段对网站进行采集。本文主要介绍一些防采集策略,以帮助开发者更好地保护网站隐私。 1. User-Agent 策略 User-Agent 是一种用户代理信息,用于标识用户所…

    JavaScript 2023年5月28日
    00
  • 详解Vuex管理登录状态

    详解Vuex管理登录状态 Vuex是一个专门为Vue.js应用程序开发的状态管理库,它能够用来管理整个应用程序的状态。其中包括登录状态的管理。下面将详细讲解如何使用Vuex来管理登录状态。 步骤一:安装Vuex 首先需要使用npm或yarn安装Vuex。使用npm安装的命令如下: npm install vuex –save 步骤二:创建Vuex Stor…

    JavaScript 2023年6月11日
    00
  • JavaScript 作用域链解析

    JavaScript 作用域链解析是指在当前作用域中查找变量时,如果找不到,就会沿着作用域链向上一层层查找,直到找到该变量或者到全局作用域仍未找到为止。 在 JavaScript 中,每个函数都有自己的作用域,即函数作用域。在函数内部定义的变量,只能在该函数内部访问,不能在函数外部访问。如果在函数外部使用该变量,就会抛出 ReferenceError 异常。…

    JavaScript 2023年6月10日
    00
  • JavaScript验证Email(3种方法)

    JavaScript验证Email(3种方法) 什么是Email? Email又称电子邮件,是一种利用计算机网络提供的电子信箱来交换电子邮件(简称邮件)的通信方式。Email具有传输快捷、费用低廉、传递资料范围广泛、信息安全性好、随时随地都可以阅读等特点。 为什么需要验证Email? 在许多场合中,Email是身份验证、信息传递和通信的必要手段。但是,一些用…

    JavaScript 2023年5月19日
    00
  • 服务器安全设置的几个注册表设置

    接下来我将详细讲解“服务器安全设置的几个注册表设置”的完整攻略。 1. 前言 在保障服务器安全的过程中,调整服务器的注册表设置可以起到一定的作用。本文将结合示例,讲解几个比较常见的注册表设置,以帮助服务器管理员加强服务器的安全防护。 2. 禁用USB存储设备 为了防止外部用户携带的恶意软件通过USB存储设备传播到服务器上,可以通过禁用USB存储设备来增加服务…

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