面试js考察点

###面试JS考察点详解#### 1.原型链**定义**:JavaScript中的每个函数都有一个`prototype`属性,这个属性是一个对象。当我们创建一个新对象时,该对象会继承其构造函数的`prototype`对象的所有属性和方法。这种通过链接而形成的链状结构被称为“原型链”。 **作用**: - **实现继承**:通过原型链,子对象可以访问父对象的属性和方法。 - **查找属性**:当试图访问一个对象的某个属性或方法时,如果当前对象没有,则会沿着原型链向上查找。 **示例**: ```javascript function Person(name) { this.name = name; } Person.prototype.sayHello = function() { console.log("Hello, " + this.name); }; var person = new Person("Alice"); person.sayHello(); //输出"Hello, Alice" ``` #### 2.闭包**定义**:闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包最常见的方式就是在一个函数内部创建另一个函数。 **特点**: - **保持私有变量**:闭包可以维持外部函数的变量环境。 - **延迟执行**:闭包可以保留变量状态直到被调用。 **示例**: ```javascript function outerFunction() { var count = 0; function innerFunction() { count++; console.log(count); } return innerFunction; } var closureFunc = outerFunction(); closureFunc(); //输出1 closureFunc(); //输出2 ``` #### 3.事件模型**DOM 0级事件模型**:只支持事件处理程序绑定,不区分捕获和冒泡阶段。 **DOM 2级事件模型**:支持事件捕获、目标阶段和事件冒泡三个阶段。 **IE事件模型**:只有事件冒泡阶段。 **示例**: ```javascript document.getElementById('example').addEventListener('click', function(event) { console.log('Event phase:', event.eventPhase); // 3 for bubbling phase }, false); //第二个参数表示是否在捕获阶段处理事件``` #### 4. `this`的再理解**定义**:`this`关键字在JavaScript中是一个特殊的关键字,它指向当前执行上下文的对象。 **规则**: - **全局上下文**:非严格模式下为`window`,严格模式下为`undefined`。 - **函数调用**:默认情况下指向全局对象。 - **对象方法调用**:指向该对象。 - **构造函数**:指向新创建的对象。 - **箭头函数**:继承自外层函数。 **示例**: ```javascript var obj = { value: 'global', method: function() { console.log(this.value); } }; obj.method(); //输出"global" ``` #### 5. AJAX理解**定义**:Asynchronous JavaScript and XML(异步JavaScript和XML),一种无需重新加载整个网页的情况下更新部分网页的技术。 **步骤**: 1.创建`XMLHttpRequest`对象。 2.设置请求类型(GET/POST)和URL地址。 3.发送请求。 4.监听请求完成状态。 5.处理响应数据。 **示例**: ```javascript var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { console.log(xhr.responseText); } }; xhr.open('GET', 'data.json', true); xhr.send(); ``` #### 6.浏览器的线程机制**GUI渲染线程**:负责绘制用户界面。 **JS引擎线程**:解析和执行JavaScript代码。 **浏览器事件触发线程**:处理DOM事件和其他事件。 **HTTP请求线程**:处理网络请求。 **示例**: ```javascript console.log('Start'); setTimeout(() => console.log('Timeout'), 0); console.log('End'); ```这段代码先输出“Start”和“End”,然后等待一段时间后输出“Timeout”。这是因为JS引擎线程首先执行同步代码,然后将定时器任务加入事件队列,等待主线程空闲时执行。以上只是JavaScript面试中可能涉及的一些关键知识点,后续还将继续深入探讨其他方面,例如内存泄漏问题、长连接的应用等。
md 文件大小:5.59KB