前端面试复习4---JS 模块化基本认识

前端面试,如果连前端基础都没有掌握,那还能面试成功吗? 前言 基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架再好,无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。 (本篇文章可能只是适用于刚毕业的同学或者毕业 2 年之内的小伙伴,大家酌情阅读~~~) 面试准备 1)准备面试简历: 个人基本信息:如姓名、年龄、联系电话、邮箱,专业,学校等 工作经历:包括工作时间、公司、岗位、职责、技术栈、突出业绩等。 对工作理解和掌握情况:说明每个技能点是了解、熟悉、熟练使用、还是精通的水平。精准定位应聘岗位任职要求。 其他 阅读详情

JS 模块化基本认识

背景

  1. js 本身定位: 开始只是简单的页面设 + 基本的表单提交,前后端不分离
  2. 并无模块化或者命名空间的概念

JS 的模块化需求日益增长

幼年期:无模块化(委婉的辩解),不同功能的 js 分成多个 js 文件

  1. 开始需要在页面中增加一些不同的 js:动画、表单、格式化工具
  2. 多种 js 文件被分在不同的文件中
  3. 不同的文件又被同一个模板所引用
  4. 文件分离是最基础的模块化
// 例如:test.html 页面引用多个 js 文件
<script src="jquery.js"></script>
<script src="main.js"></script>
<script src="tools.js"></script>

面试问题:script 标签两个参数: async & defer

<script src="jquery.js" async></script>
默认模式:
                 download-execute
------parse------                ------parse------

defer 模式(推迟执行模式):
                 download                 execute
------parse--------------------parse------

async 模式(异步下载模式):
                 download-execute
------parse---------------       ------parse------

总结:

  1. parse 与 execute 是互斥的,解析的时候不执行,执行的时候不解析
  2. 默认模式:解析到标签,立刻 pending,并且下载执行
  3. defer 模式:解析到标签开始异步下载,解析完成后开始执行
  4. asyn 模式:解析到标签开始异步下载,下载完成后立刻执行并阻塞渲染,执行完成后,继续渲染
  5. defer, asyn 参数要在 IE9+ 的浏览器才有效
  6. 缺点:全局的变量和方法容易被覆盖和污染,不利于大型项目的开发以及多人团队共建

成长期:模块化的雏形-IIFE(语法侧的优化)

  1. IIFE: Immediately Invoked Function Expression (立即调用函数表达式)
  2. 立即执行函数利用的其实就是作用域的把控

面试问题1:利用 IIFE 创建一个最简单的模块,和在外部调用模块内部的函数

const module = (() => {
  let count = 0;
  return {
    increase: () => ++count;
    reset: () => {
      count = 0;
    }
  }
})();

module.increase();
module.reset();

面试问题2:有额外依赖的时候,如何优化 IIFE 的相关代码?

答:通过传参,例如下面的代码 iifeModule 模块依赖了 module1, module2 这两个模块,在立即执行的时候把 module1, module2 传进去通过 ependencyModule1, dependencyModule2 接收,这样在 iifeModule 这个模块内部就可以调用这两个模块了

const iifeModule = ((dependencyModule1, dependencyModule2) => {
  let count = 0;
  const obj = {
    increase: () => ++count;
    reset: () => {
      count = 0;
    }
  }
  // dependencyModule1.xxx
  // dependencyModule2.xxx
})(module1, module2);

面试问题3:了解早期 jQuery 依赖处理和模块加载方案吗?/了解传统 IIFE 是如何解决多方依赖的问题的吗?

答:IIFE + 传参调配。实际上传统框架应用了一种 revealing 模式 的写法。

revealing 模式 -> 揭示模式

return 的是能力 = 使用方传参(x) + 本身逻辑能力 + 依赖的能力

const iifeModule = ((dependencyModule1, dependencyModule2) => {
  let count = 0
  const increase = () => ++count // 3. 本身逻辑能力
  const reset = (val) => {
    count = 0 // 3. 本身逻辑能力
    // 4. 依赖的能力
    // dependencyModule1.xxx
    // dependencyModule2.xxx
  }

  // 1. return 的是能力
  return {
    increase,
    reset
  }
})(module1, module2)
iifeModule.increase(1) // 2. 使用方传参(x)
iifeModule.reset()

可能被问到的问题

// 部分开源项目分别传入全局、指针、框架作为参数
(function(window, $, undefined) {
    const _show = function() {
        $("#app").val("hi zhaowa");
    }
    window.webShow = _show;
})(window, jQuery);

// window - 1. 全局作用域转成局部作用域,执行不用全局调用,提升效率 2. 编译时候,优化压缩(function(c){}(window))
// jQuery - 1. 内部可以独立定制复写,保障稳定 2. 防止全局污染
// undefined - 防止外部重写 undefined

成熟期

1. CommonJS

  1. node.js 制定,在服务端和客户端都可以使用
  2. 在客户端需要通过 browserify 编译打包
  3. 通过 module + export 去对外暴露接口
  4. 通过 require 来调用其他模块
  5. 优点:率先在服务端实现了从框架层面解决依赖、全局变量污染的问题
  6. 缺点:针对的是服务端,对于异步依赖没有很友好的处理和考虑
服务端使用 demo
|----/modules
     |----/module1.js
     |----/module2.js
     |----/module3.js
|----/app.js
|----/package.json

package.json 通过 npm init 生成或者手动创建

{
  "name": "demo1",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "uniq": "^1.0.1"
  }
}

app.js

const uniq = require('uniq')
const module1 = require('./modules/module1')
const module2 = require('./modules/module2')
const module3 = require('./modules/module3')

module1.fn()
module2()
module3.fn1()
module3.fn2()

const list = uniq(module3.list)
console.log(list)

module1.js

module.exports = {
  msg: '---module1---',
  fn() {
    console.log(this.msg)
  }
}

module2.js

module.exports = () => {
  console.log('---module2---')
}

module3.js

exports.fn1 = () => {
  console.log('---module3-1---')
}

exports.fn2 = () => {
  console.log('---module3-2---')
}

exports.list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1]
浏览器端使用 demo
|----/js
     |----/src
          |----app.js
          |----/module1.js
          |----/module2.js
          |----/module3.js
|----/index.html
|----/package.json

package.json 通过 npm init 生成或者手动创建

{
  "name": "demo2",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "browserify": "^17.0.0"
  },
  "dependencies": {
    "uniq": "^1.0.1"
  }
}

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="./js/dist/bundle.js"></script>
</head>

<body>

</body>

</html>

app.js

const uniq = require('uniq')
const module1 = require('./module1')
const module2 = require('./module2')
const module3 = require('./module3')

module1.fn()
module2()
module3.fn1()
module3.fn2()

const list = uniq(module3.list)
console.log(list)

module1.js

module.exports = {
  msg: '---module1---',
  fn() {
    console.log(this.msg)
  }
}

module2.js

module.exports = () => {
  console.log('---module2---')
}

module3.js

exports.fn1 = () => {
  console.log('---module3-1---')
}

exports.fn2 = () => {
  console.log('---module3-2---')
}

exports.list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1]

readme.md

# 导读

## 安装 browserify

1. 首先全局安装 `npm install browserify -g`
2. 再项目内安装 `npm install browserify --save-dev`

## 打包

`browserify js/src/app.js -o js/dist/bundle.js`

2. AMD require.js

  1. 优点:解决了浏览器中异步加载模块,可以并行加载多个模块
  2. 缺点:会有引入成本,没有考虑按需加载
|----/js
     |----/libs
          |----angular.min.js
          |----jquery-2.1.4.min.js
          |----require.min.js
     |----/modules
          |----alerter.js
          |----dataService.js
     |----main.js
|----index.html

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script data-main="js/main.js" src="js/libs/require.min.js"></script>
</body>

</html>

main.js

(function () {
  requirejs.config({
    // baseUrl: 'js/', // 基本路径(出发点)
    paths: { // 配置路径
      dataService: './modules/dataService',
      alerter: './modules/alerter',
      jquery: './libs/jquery-2.1.4.min',
      angular: './libs/angular.min'
    },
    shim: {
      angular: {
        exports: 'angular'
      }
    }
  })

  // 异步加载+回调方法
  requirejs(['alerter', 'angular'], function (alerter, angular) {
    alerter.showMsg()
    console.log(angular)
  })
})()

alerter.js

define(['dataService', 'jquery'], function (dataService, $) {
  const msg = 'alerter.js'
  function showMsg() {
    console.log(msg, dataService.getName())
  }
  $('body').css('background', 'pink')
  return { showMsg }
});

dataService.js

define(function () {
  const name = 'dataService.js'
  function getName() {
    return name
  }
  return { getName }
});
兼容判断 AMD & CJS

UMD 的出现

(define('amdModule', [], (require, export1, module) => {
  // 引入部分
  const dependencyModule1 = require('./dependencyModule1');
  const dependencyModule2 = require('./dependencyModule2');

  // 核心逻辑
  let count = 0;
  const increase = () => ++count;
  const reset = val => {
    count = 0;
    // dependencyModule1.xxx
    // ...
  }

  export1.increase = increase;
  export1.reset = reset;
}))(
  // 目标:一次性去区分CJS和AMD
  // 1. CJS factory
  // 2. module module.exports
  // 3. define
  typeof module === "Object" && module.exports && typeof define !== "function" ? factory => module.exports = factory(require, exports, module) : define
)

3. CMD sea.js

  1. 优点:按需加载,依赖就近
  2. 缺点:依赖于打包,加载逻辑存在于每个模块中,扩大了模块的体积
  3. AMD 和 CMD 区别 => 依赖就近,按需加载
|----/js
     |----/libs
          |----sea.js
     |----/modules
          |----main.js
          |----module1.js
          |----module2.js
          |----module3.js
          |----module4.js
     |----main.js
|----index.html

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script src="./js/libs/sea.js"></script>
  <script>
    seajs.use('./js/modules/main.js')
  </script>
</body>

</html>

main.js

define(function (require) {
  const module1 = require('./module1') // 按需加载,依赖就近(不需要提前加载)
  console.log(module1.getModule1())

  const module4 = require('./module4')
  module4.showModule4()

})

module1.js

define(function (require, exports, module) {
  const msg = 'module1'
  function getMsg() {
    return msg
  }
  module.exports = { getModule1: getMsg }
})

module2.js

define(function (require, exports, module) {
  const msg = 'module2'
  function showMsg() {
    console.log(msg)
  }
  module.exports = showMsg
})

module3.js

define(function (require, exports, module) {
  const msg = 'module3'
  function showMsg() {
    console.log(msg)
  }
  exports.module3 = { showModule3: showMsg }
})

module4.js

define(function (require, exports, module) {
  const msg = 'module4'

  // 同步引入
  const module2 = require('./module2')
  module2()

  // 异步引入
  require.async('./module3', function (m3) {
    m3.module3.showModule3()
  })

  function showMsg() {
    console.log(msg)
  }

  exports.showModule4 = showMsg
})

4. ES6 module

  1. 优点:通过一种最统一的形态整合了 Js 的模块化
  2. 缺点:本质上还是运行时做的依赖分析
|----/src
      |----/js
          |----main.js
          |----module1.js
          |----module2.js
          |----module3.js
      |----index.html
|----.babelrc
|----package.json
|----readme.md

readme.md

# 项目说明

## 在根目录定义 .babelrc 文件

1. 在 babel 插件工作之前会去读取 .babelrc 里面的内容,根据它里面的内容去干湖

## 编译

1. `babel src/js -d build/js`
2. `browserify build/js/main.js -o dist/js/bundle.js`

package.json

{
  "name": "chyco_es6_demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-preset-es2015": "^6.24.1"
  },
  "dependencies": {
    "jquery": "^1.12.4"
  }
}

.babelrc

{
  "presets": ["es2015"]
}

index.html

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script src="../dist/js/bundle.js"></script>
</body>

</html>

main.js

import $ from "jquery";
import { fn1, fn2, name } from "./module1";
import { fn1 as m2fn1, fn2 as m2fn2, name as m2name } from "./module2";
import module3 from "./module3";

fn1()
fn2()
console.log(name)

m2fn1()
m2fn2()
console.log(m2name)

module3()

$('body').css('background', 'pink')

module1.js

// 分别暴露
export function fn1() {
  console.log('module1 fn1')
}

export function fn2() {
  console.log('module1 fn2')
}

export const name = 'module1'

module2.js

// 统一暴露/常规暴露
function fn1() {
  console.log('module2 fn1')
}

function fn2() {
  console.log('module2 fn2')
}
const name = 'module2'

export { fn1, fn2, name }

module3.js

export default () => {
  console.log('module3')
}
面试问题:ESM 动态模块

考察:export promise

懒加载ES11原生解决方案

import('./esModule.js').then((dynamicEsModule) => {
  dynamicEsModule.increase()
})
101道经典JavaScript面试题总结(附答案,建议收藏) 最近在整理 JavaScript 的时候发现遇到了很多面试中常见的面试题,本部分主要是作者在 Github 等各大论坛收录的 JavaScript 相关知识和一些相关面试题时所做的笔记,分享这份总结给大家,对大家对 JavaScript 的可以来一次全方位的检漏和排查。 目录1. 介绍 js 的基本数据类型。2. JavaScript 有几种类型的值?你能画一下他们的内存图吗?3. 什么是堆?什么是栈?它们之间有什么区别和联系?4. 内部属性 [[Class]] 是什么?5. 介绍 js 有哪些内置对象?6 阅读详情

相关推荐

QT的温湿度显示系统

大家好,这里是石侃侃的博客,欢迎前来讨论这篇文章介绍的是DHT11在2440上的基于Qt5.6的应用基于单片机系统的温湿度监测系统构成框图如图2-1所示。图2-1 系统构成框图该系统采用单片机s3c2440作为了本设计的核心元件。利用LCD作为了显示器件,利用触摸屏作为用户界面输入设备,第一行显示当前实时的温度,湿度,第二行依次显示历史时刻最高的温度值,最高的湿度值。第三行是一个文本框,记录了程...

zxpcus的博客 1万+

IIFE的使用和解决问题(总结)

IIFE是立即执行函数表达式是一种在避免全局命名和变量污染时常用的一种方法。在ES5中由于没有块级作用域的相关说法中会使用到

前端开发工程师 4490

通达信【雷霆尊者排序】实战指南:高胜率竞价指标解析与优化策略

本文详细解析了通达信【雷霆尊者排序】指标在集合竞价阶段的应用,提供从基础设置到实战解码的完整指南。文章重点剖析了‘雷霆’、‘使者’、‘精选’等核心信号的逻辑与共振策略,并分享了如何结合K线、市场情绪进行综合研判与风险控制,旨在帮助短线交易者提升早盘选股效率与胜率。

pear55的博客 919

2024年JavaScript常用前端框架和库浅谈_前端框架设计-js,四轮面试成功率高吗

其实前端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。这里再分享一个复习的路线:(以下体系的复习资料是我从各路大佬收集整理好的)《前端开发四大模块核心知识笔记》最后,说个题外话,我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

2401_84438488的博客 1117

Halcon实战:5分钟搞定自定义直线卡尺工具(附完整代码下载)

本文详细介绍了如何使用Halcon快速开发自定义直线卡尺工具,通过交互式ROI绘制、边缘检测和直线拟合三个核心函数,实现高效工业视觉检测。文章包含完整代码下载,帮助开发者在5分钟内掌握这一实用工具的开发技巧,提升直线检测的精度和效率。

perl8的博客 245

自适应动态规划硕士博士论文学习

强化学习关注随机过程中的序贯决策问题,而自适应动态规划关注动态系统的控制问题。吸引域:系统渐近稳定的区域。

DarlingLSA的博客 1415

js、jQuery面试题整理

js、jQuery面试题整理 1.数据类型 基本类型:除Object、String、Number、boolean、null、undefined。 引用类型:object。里面包含的 function、Array、Date。 2.数组方法 join():数组转为字符串,可带中间符号 push():数组尾部添加内容,返回新长度 pop():数组尾部删除一条内容,返回长度 unshift():数组头部添加内容,返回新长度 shift():数组头部删除一条内容,返回删除内容 sort():数组内容从大到小排序 re

Juliet_xmj的博客 7965

OV5640摄像头DVP与MIPI接口配置实战:从30Hz到60Hz的性能优化指南

本文详细解析了OV5640摄像头在DVP与MIPI接口下的60Hz性能优化方法,重点解决720p分辨率下帧率仅30Hz的常见问题。通过精确配置时钟树、传感器寄存器和接口参数,提供DVP与MIPI接口的实战配置代码,并分享调试工具与性能验证技巧,帮助开发者实现稳定的60fps输出。

weixin_29223603的博客 1288

来自大厂 300+ 道前端面试题大全附答案(整理版)+前端常见算法面试题~~最全面详细

进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份腾讯、字节跳动、百度、阿里等一线互联网公司面试题大全,其中概括的知识点(HTML,CSS,JS,React,Vue,NodeJS,互联网基础知识)

weixin_56134381的博客 1万+

第14.1章 高翔博士2025年11月最新开源框架Lightning-LM源码学习解读(一):激光-IMU定位+建图算法各模块简介

Lightning-LM:高效激光SLAM定位系统 该框架基于模块化设计,通过激光-IMU融合实现快速建图与定位,核心特点包括: 极速性能:纯CPU运行(建图1.2核/定位0.8核) 模块化架构:包含激光里程计(LIO)、地图管理、回环检测等独立模块 动态场景支持:地图分块加载、动静态图层分离 多模式适配:支持ROS2环境下的在线/离线运行 关键模块包括前端里程计(core/lio)、2D/3D地图转换(core/g2p5)、轻量优化库(core/miao)等,通过系统控制器(core/system)协调流

行知SLAM 2420

[特殊字符] 从零构建携程/飞猪机票价格爬虫:Python异步抓取与反爬对抗实战

在出行决策、竞品分析、价格预测模型训练等场景中,稳定获取携程(Ctrip)和飞猪(Fliggy)的实时机票价格波动数据是刚需。然而,这两大平台均部署了业界顶尖的反爬体系——包括但不限于:动态请求签名(SignToken设备指纹采集(UACanvasWebGL接口参数加密(X-Sign_abtestcookie混淆)频率限制与 IP 封禁(滑动窗口 + 行为检测)目录前言:为什么需要自建机票价格爬虫?一、技术选型与项目架构1.1 核心技术栈1.2 系统架构图(文字描述)1.3 法律与道德声明。

2201_76125261的博客 335

做了一份前端面试复习计划,保熟~

前言 以前我在CSDN上看到面试贴就直接刷掉的,从不会多看一眼,直到去年 9 月份我开始准备面试时,才发现很多面试经验贴特别有用,看这些帖子(我不敢称之为文章,怕被杠)的过程中对我的复习思维形成影响很大,所以我现在把之前自己好好整理的面试计划分享出来,希望能帮到接下来要找工作的朋友,不喜勿喷哈~ 一、简历 简历在找工作过程中是非常非常重要的,无论你是什么途径去面试的,面试你的人一定会看你的简历。 推荐阅读:如何写「前端简历」,能敲开字节跳动的大门?一份优秀的前端开发工程师简历是怎么样的? 1、重点

Jack, what else can you do besides holding your little darling? 921

Serial RapidIO Gen2 IP 说明(一)

概述 高速IO(RapidIO)互联架构,用来兼容当前最流行的集成通信处理器、主处理器、联网的数字信号处理器,是一种高性能、分组交换(报文交换)的互联技术。它解决了高性能嵌入式产业稳定性、高带宽以及系统内部更快的总线速率的需求。 高速IO(RapidIO)标准由三层定义:逻辑层、传输层、物理层。逻辑层定义了所有的协议内容和报文格式。这些是终端发起和完成一次传输所必需的信息。传输层提供了报文从一个端点传输到另外一个端点必要的路线信息。物理层则描述了设备级的端口声明,如报...

记录所学,分享知识,结识挚友 1493

2024 web 前端面试总结(内附面经)

具体有http,http2.0,https,dns,cdn,tcp,缓存,跨域,安全,本地存储这些东西。第二遍的时候不能有不理解的地方了,原型,继承,原型链,执行上下文,垃圾回收,作用域链书上讲的不清楚,看不懂的去网上找,还是不懂自己用例子测试。开始面试以后,肯定有好多东西不会,可以通过写面经,总结的方式来弥补自己的缺陷,不能面完了就结束了。有些可能没有,因为现场面的时候是连着面的,所以没有整理的时间,回去的时候都忘的差不多了,而且大多数都是类似的问题,可能少数几个不一样,也不值得整理了。

2501_90326101的博客 882

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

2024前端面试js题目总结,不妨看看有没有属于你的那道题

这种区别各有优劣,只是语法上的差距,而且requireJS和SeaJS都支持对方的写法AMD和CMD最大的区别是对依赖模块的执行时机处理不同,注意不是加载的时机或者方式不同30.报表绘图类的框架​。

2401_83974087的博客 1261

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【面试题】做了一份前端面试复习计划,保熟~

以前我看到面试贴就直接刷掉的,从不会多看一眼,直到去年 9 月份我开始准备面试时,才发现很多面试经验贴特别有用,看这些帖子(我不敢称之为文章,怕被杠)的过程中对我的复习思维形成影响很大,所以我现在把之前自己好好整理的面试计划分享出来,希望能帮到接下来要找工作的朋友,不喜勿喷哈~CSS3 中的盒模型有以下两种:标准盒模型IE(替代)盒模型。

web全栈开发的博客 1044

前端面试问题

共同点:都存储在浏览器本地。区别:1)一般来说cookie是由服务器端写入(也可以前端写入,document.cookie进行赋值就是在cookie上追加数据,作为属性来读就是获取cookie),sessionStorage和localStorage都是由前端写入的;2)cookie的生命周期由服务器端写入时设置好的,localStorage是写入就一直存在,除非手动清除,sessionStorage是由页面关闭时自动清除;3)cookie存储空间大约4kb左右,其他两个大约5M。

scclp的博客 1755

JavaScript 前端面试知识点总结

本部分主要是笔者在复习 JavaScript 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出!js 一共有五种基本数据类型,分别是 Undefined、Null、Boolean、Number、String,还有在 ES6 中新增的 Symbol 和 ES10 中新增的 BigInt 类型。Symbol 代表创建后独一无二且不可变的数据类型,它的出现我认为主要是为了解决可能出现的全局变量冲突的问题。

weixin_50367873的博客 1023

2025年10年以上前端面试复习大纲与计划

本文提供了一份为期4周的Vue前端开发复习计划,分为基础巩固、进阶架构和生态实战三个阶段。内容包括HTML/CSS/JS基础、Vue2/Vue3核心特性、性能优化、工程化架构等知识点,并附有详细的学习时间安排。同时整理了高频面试题目及答案参考,涵盖响应式原理、CompositionAPI、大型应用架构设计等核心考点,最后建议按STAR原则准备3-5个代表性项目案例,为面试做好充分准备。

neal 900

高频前端面试项目考点(npm,git,webpack,TS4,sass)

使用ant-design做ui,redux做状态管理,typescript增加类型,axios网络库后端接口Navicat创建数据库和空表加载MySQL等模块创建MySQL连接池(设置服务器地址host,服务器端口号port) 和 服务器对象server(127.x.x.x)是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。

luemeon的博客 3408

JavaScript 总结【面试笔记 + 经典面试题 ,超全前端中高级面试复习大纲

阿里十分注重你对源码的理解,对你所学,所用东西的理解,对项目的理解。CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

2301_76348206的博客 935

h5前端开发,web前端CSS全局样式,已拿offer附真题解析_h5 全局css

资料过多,篇幅有限,需要文中全部资料可以点击这里免费获取前端面试资料PDF完整版!自古成功在尝试。不尝试永远都不会成功。勇敢的尝试是成功的一半。

2401_86400201的博客 2044

太厉害了!前端大牛熬夜把JavaScript面试题整理成了PDF文档

面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。96道前端面试题:常用算法面试题:内容主要包括HTML,CSS,JavaScript,浏览器,性能优化[外链图片转存中…(img-tRl0z0oO-1719247974857)]内容主要包括。

2401_85123486的博客 802

堪称2024最强的前端面试场景题,已帮助432人成功拿到offer

前言​ 2024年的秋季招聘还有两个月就即将到来,为了帮助前端求职者提升复习效率,更快的拿到前端offer​ 所以,我咨询了超过18位资深中大厂面试官后,准确精炼了一套切实可行的场景题,现在已经有432位粉丝通过这套题走入了理想的岗位,所以分享出来给大伙看看,有什么不足之处欢迎评论补充​ 接下来,我将分享超过200多个常见的前端面试场景,并提供一份答案:篇幅所限本文就只贴一下题目啦,答案在文末哦,都汇总到一起啦!

极客前端探索者的博客 7239
上一篇: 前端面试复习3---异步与 promise
下一篇: 前端面试复习5---浏览器内置对象
ChycoSmile
博客等级 码龄10年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值