7道关于JS this的面试题,你能答对几个

yizhihongxing

7道关于JS this的面试题

问题1: this指向谁?

this关键字是在函数执行时被解析的。它指向一个对象,这个对象是在调用函数时传入的。或者说,在调用函数时,this的值由函数的调用方式来决定。例如:

function person() {
  this.name = "Tom";
}

var a = new person();
console.log(a.name); // "Tom"

在上面的代码中,我们使用了new操作符来调用函数。new操作符会创建一个新的对象,并且将它作为this参数传递给函数。因此,在person函数中,this指向了新创建的对象。

问题2:箭头函数对this有什么影响?

对于箭头函数,this指向的是函数定义时所在的上下文,而不是调用时的上下文。例如:

const person = {
    name: "Tom",
    age: 26,
    getAge: function() {
        const self = this;
        setTimeout(function() {
            console.log("age is", self.age); // age is 26
        }, 1000);

        setTimeout(() => {
            console.log("age is", this.age); // age is 26
        }, 1000);
    }
};

person.getAge();

在上面的代码中,getAge方法中的第一个setTimeout函数使用了普通函数来定义,因此this指向的是全局对象。而第二个setTimeout使用了箭头函数,因此this指向的是person对象。

问题3: bindcallapply的作用是什么?

bindcallapply可以用来显式地指定函数的上下文。它们的作用如下:

  • bind:创建一个新的函数,这个函数的this值被绑定到指定的对象上,并且可以传递参数。
  • call:调用一个函数,并且指定这个函数的this值和参数。参数是以逗号分隔的。
  • apply:调用一个函数,并且指定这个函数的this值和参数。参数是以数组的形式传递的。

例如:

function person() {
  console.log(this.name);
}

var a = {name: "Tom"};
var b = {name: "Jerry"};

var personA = person.bind(a);
personA(); // "Tom"

person.call(b); // "Jerry"

var args = [1, 2, 3];
person.apply(a, args); // "Tom"

问题4:thisnew操作符的关系是什么?

在使用new操作符时,this指向的是新创建的对象。例如:

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

var a = new person("Tom");
console.log(a.name); // "Tom"

在上面的代码中,我们使用new操作符来创建一个新的person对象。person函数中的this指向的就是这个新创建的对象。

问题5: 闭包如何影响函数中的this值?

闭包可以对函数中的this值造成影响。例如:

function person(name) {
  this.name = name;
  var self = this;
  setTimeout(function() {
    console.log(self.name); // "Tom"
    console.log(this.name); // undefined
  }, 1000);
}

var a = new person("Tom");

在上面的代码中,setTimeout函数创建了一个闭包。在这个闭包中,this指向的是全局对象,而不是person对象。因此,在闭包中使用了一个名为self的变量来保存this的值,以确保在闭包中引用的是person对象。

问题6:如何在对象中使用this

在对象中使用this是非常方便的。我们可以使用this来引用对象的属性和方法。例如:

const person = {
    name: "Tom",
    age: 26,
    sayHello: function() {
        console.log(`Hello, my name is ${this.name}, I'm ${this.age} years old.`);
    }
};

person.sayHello(); // Hello, my name is Tom, I'm 26 years old.

在上面的代码中,sayHello方法中的this关键字可以引用person对象中的属性和方法,从而动态创建输出语句。

问题7:如果函数中没有this,该怎么办?

如果函数中没有this,则不需要使用this。例如:

function add(a, b) {
  return a + b;
}

console.log(add(1, 2)); // 3

在上面的代码中,add函数中没有使用this关键字。因此,我们可以直接调用函数,而不需要担心this的上下文。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:7道关于JS this的面试题,你能答对几个 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • Javascript的表单验证-提交表单

    Javascript表单验证是Web开发中的重要环节,可以提升用户体验和网站安全性。以下是通过JS实现表单验证和提交的攻略。 步骤1:HTML表单 首先,在HTML中定义表单元素,包括输入框、单选框、多选框、下拉框等。在表单中设置提交按钮,并添加JS函数来验证表单数据是否符合需要。示例代码如下: <form action="submit.ph…

    JavaScript 2023年6月10日
    00
  • javascript实现全角转半角的方法

    javascript可以通过正则表达式实现全角转半角。具体实现步骤如下: Step 1: 获取文本 首先,我们需要获取需要转换的文本,可以通过 getElementById() 等方法获取到HTML中的文本。 const originText = document.getElementById(‘text’).innerHTML; Step 2: 利用正则表…

    JavaScript 2023年5月19日
    00
  • javascript中的对象和数组的应用技巧

    让我来为你详细讲解 Javascript 中的对象和数组的应用技巧。 对象的应用技巧 1. 使用对象来封装数据和函数 在 JavaScript 中,对象是一个拥有若干属性的数据结构。我们可以使用对象封装一些通用的属性和方法,便于代码的维护和实现。 // 定义一个封装后的学生对象 const student = { name: ‘张三’, age: 20, g…

    JavaScript 2023年5月27日
    00
  • Javascript Array sort 方法

    以下是关于JavaScript Array sort方法的完整攻略。 JavaScript Array sort方法 JavaScript Array sort方法用于对数组中的元素进行排序。该方法会改变原始数组,即将原始数组中的元素按照指定的规则进行排序。 下面是一个使用sort方法的示例: var arr = [3, 1, 2]; console.log…

    JavaScript 2023年5月11日
    00
  • thinkphp3.x中display方法及show方法的用法实例

    下面我将为你详细讲解”thinkPHP3.x中display方法及show方法的用法实例”的完整攻略。 一、display方法的用法 在thinkPHP中,display方法可以用来显示模板文件,当你调用display方法时,系统默认会去找位于View目录下的相应视图文件进行模板渲染,这个方法主要有两个参数: display($templateFile=”…

    JavaScript 2023年5月19日
    00
  • JavaScript Number 对象

    以下是关于JavaScript Number对象的完整攻略。 JavaScript Number对象 JavaScript Number对象是一种用于表示数字的数据类型。它可以表示整数、浮点数、负数等。 Number对象提了一些方法,用于对数字进行操作和转换。 创建Number对象 可以使用Number()构造函数来创建JavaScript Number对象…

    JavaScript 2023年5月11日
    00
  • window.open打开页面居中显示的示例代码

    下面是关于如何使用JavaScript代码在浏览器中打开一个新页面并使其居中显示的攻略。 1. 创建一个新页面 首先,我们需要使用 window.open() 方法创建一个新的浏览器窗口,并且通过 document.write() 方法向其写入一些内容,例如: <script type="text/javascript"> v…

    JavaScript 2023年6月11日
    00
  • JS实现网页抢购功能(触发,终止脚本)

    JS实现网页抢购功能可以基于浏览器的自动化工具,如selenium或者puppeteer,完成批量请求或模拟用户行为。在实现过程中,需要明确以下几个步骤: 登录并保持会话:在许多电商网站中,进行抢购之前首先需要登录账户。可以通过模拟登录的方式,实现自动输入账号密码并完成登录。在登录完成之后,需要保持会话以便于提交订单等后续的操作。 找到目标商品页面:一般情况…

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