web前端js面试题及答案
1. 请解释一下JavaScript是什么?
    JavaScript是一种高级的、解释型的编程语言。它是Web的三大核心技术之一,与HTML和CSS并列。JavaScript主要应用于Web开发,用来给网页增加动态功能,如响应用户的操作。
2. 请解释一下JavaScript的数据类型?
    JavaScript有以下几种基本数据类型:
    - Undefined:未定义的值,只有一个值undefined。
    - Null:表示一个空的对象或没有值,是对象的唯二值。
    - Boolean:布尔值,表示真(true)或假(false)。
    - Number:数字类型,可以是整数或浮点数。
    - String:字符串类型,表示文本数据。
    - Symbol:符号类型,表示唯二的标识符。
    - Object:对象类型,由一组键值对组成。
3. 请解释一下JavaScript中的变量提升?
    变量提升是JavaScript引擎在执行代码之前,将所有变量和函数声明移动到当前作用域的顶部的行为。这意味着你可以在声明之前使用变量,而不会报错。例如:
    ```javascript
    console.log(a); // undefined
    var a = 10;
    ```
4. 请解释一下JavaScript中的闭包?
    闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见途径就是在一个函
数内部创建另一个函数。例如:
    ```javascript
    function outer() {
        var count = 0;
        function inner() {
            count++;
            console.log(count);
        }
        return inner;
js原型和原型链的理解
    }
    var closure = outer();
    closure(); // 输出1
    closure(); // 输出2
    ```
5. 请解释一下JavaScript中的原型链?
    每个对象都有一个原型对象(prototype),当我们试图访问一个对象的属性时,如果该对象本身没有这个属性,那么JavaScript引擎会去它的原型对象上,如果原型对象也没有,就继续往上,直到到为止,这就是原型链。例如:
    ```javascript
    function Person() {}
    var person1 = new Person();
    person1.__proto__ === Person.prototype; // true
    Person.prototype.__proto__ === Object.prototype; // true
    ```
6. 请解释一下JavaScript中的事件冒泡和事件捕获?
    事件流包括三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。事件冒泡是指事件从非常深的节点开始,然后逐级向上层节点传递。事件捕获则是相反,事件从非常上层的节点开始,然后逐级向下传递。例如:
    ```html
    <div>div元素</div>
    <button>按钮</button>
    <script>
      document.querySelector('div').addEventListener('click', function() { console.log('div被点击'); }, false); // 捕获阶段触发,因为第三个参数为false,表示在捕获阶段处理事件。
      document.querySelector('button').addEventListener('click', function() { console.log('button被点击'); }, false); // 冒泡阶段触发,因为默认情况下,事件是在冒泡阶段处理事件的。