前端 JavaScript 进阶面试题, JavaScript 中连续多次调用 bind 函数,最终 this 指向什么?
前端 JavaScript 进阶面试题, JavaScript 中连续多次调用 bind 函数,最终 this 指向什么?
QA
Step 1
Q:: JavaScript 中连续多次调用 bind 函数,最终 this 指向什么?
A:: 在 JavaScript 中,连续多次调用 bind 函数,每次调用 bind 函数都会返回一个新的函数,并且该函数的 this 值被永久固定为第一次绑定的 this 值。后续的 bind 调用不会影响 this 的值。例如:var obj1 = {x: 1}; var obj2 = {x: 2}; var func = function() { console.log(this.x); }.bind(obj1).bind(obj2); func(); // 输出 1.
Step 2
Q:: JavaScript 中的闭包是什么?
A:: 闭包是指那些能够访问自由变量的函数。换句话说,闭包能够记住并访问创建它的上下文环境中的变量。在 JavaScript 中,函数和其词法作用域内的变量形成闭包。例如:function outer() { var a = 1; function inner() { console.log(a); } return inner; } var closure = outer(); closure(); // 输出 1.
Step 3
Q:: 如何解释 JavaScript 的原型链?
A:: JavaScript 的原型链是实现继承的一种方式。每个对象都有一个内部链接到另一个对象的属性,称为其原型。一个对象的原型对象也可能有它自己的原型,依此类推,这种关系称为原型链。当试图访问一个对象的属性时,如果这个属性不在对象自身上,那么 JavaScript 引擎会在原型链上继续查找,直到找到该属性或到达原型链的末尾(null)。
Step 4
Q:: 什么是事件委托,为什么要使用它?
A:: 事件委托是一种利用事件冒泡机制,将事件监听器添加到父元素上,而不是每个子元素都添加事件监听器的技术。这样可以提高性能,减少内存占用,尤其是在有大量子元素的情况下。例如:在一个包含许多列表项的 ul 元素上添加点击事件监听器,而不是在每个 li 元素上添加监听器。