首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深聊Nodejs模块化

Nodejs 源码 中,我们可以看到当解析不到文件名时候,会尝试使用 tryExtensions 方法来添加扩展名:if (!...这是使用 C/C++ 编写扩展模块,通过内置 dlopen 方法加载最后编译生成文件.mjs 文件:这是 Nodejs 支持 ESM 加载方式模块文件,所以使用 require 方法载入时候会直接抛出错误在...弄明白 Nodejs 加载 JavaScript 原理之后,我们很容易就可以弄明白为什么不能给 exports 直接赋值了,根本原因就在于 JavaScript 是一门按传递(Pass-by-Value...)语言,不管我们给变量赋值是引用类型还是原始类型,我们得到变量得到都是一个,只不过赋值引用类型变量得到是一个代表存储引用类型内存地址可以理解为指针),而我们使用变量 JavaScript...当我们有大量计算操作需要执行时,我们可以将计算操作放到 C/C++ 模块中执行,这样可以提升 Nodejs 在计算密集型场景下表现。

1.6K21

43道JavaScript面试题

我们还没有为name变量赋值,所以仍然保持undefined使用let关键字(和const)声明变量也会存在变量提升,与var不同,初始化没有被提升。...在我们声明(初始化)它们之前,它们是不可访问。 这被称为“暂时死区”。 当我们在声明变量之前尝试访问变量,JavaScript会抛出一个ReferenceError。...虽然看起来像一个数字,但它并不是一个真正数字:它有一堆额外功能,是一个对象。 当我使用==运算符只检查它是否具有相同。 他们都有3,所以返回true。...为了避免这种情况,我们可以使用“use strict”。 这可以确保在将变量赋值之前必须声明变量。 ---- 10. 当我们这样做时会发生什么?...当我传递参数,这与变量x不同。这个变量x是属于catch作用域。 之后,我们将这个块级作用域变量设置为1,并设置变量y。 现在,我们打印块级作用域变量x,等于1。

1.8K20
您找到你想要的搜索结果了吗?
是的
没有找到

送你43道JavaScript面试题

我们还没有为name变量赋值,所以仍然保持undefined使用let关键字(和const)声明变量也会存在变量提升,与var不同,初始化没有被提升。...在我们声明(初始化)它们之前,它们是不可访问。这被称为“暂时死区”。当我们在声明变量之前尝试访问变量,JavaScript会抛出一个ReferenceError。...虽然看起来像一个数字,但它并不是一个真正数字:它有一堆额外功能,是一个对象。 当我使用==运算符只检查它是否具有相同。他们都有3,所以返回true。...为了避免这种情况,我们可以使用“use strict”。这可以确保在将变量赋值之前必须声明变量。 ---- 10. 当我们这样做时会发生什么?...当我传递参数,这与变量x不同。这个变量x是属于catch作用域。 之后,我们将这个块级作用域变量设置为1,并设置变量y。现在,我们打印块级作用域变量x,等于1。

1.4K10

送你43道JavaScript面试题

我们还没有为name变量赋值,所以仍然保持undefined使用let关键字(和const)声明变量也会存在变量提升,与var不同,初始化没有被提升。...在我们声明(初始化)它们之前,它们是不可访问。 这被称为“暂时死区”。 当我们在声明变量之前尝试访问变量,JavaScript会抛出一个ReferenceError。...虽然看起来像一个数字,但它并不是一个真正数字:它有一堆额外功能,是一个对象。 当我使用==运算符只检查它是否具有相同。 他们都有3,所以返回true。...为了避免这种情况,我们可以使用“use strict”。 这可以确保在将变量赋值之前必须声明变量。 ---- 10. 当我们这样做时会发生什么?...当我传递参数,这与变量x不同。这个变量x是属于catch作用域。 之后,我们将这个块级作用域变量设置为1,并设置变量y。 现在,我们打印块级作用域变量x,等于1。

1.5K20

送你43道JavaScript面试题

我们还没有为name变量赋值,所以仍然保持undefined使用let关键字(和const)声明变量也会存在变量提升,与var不同,初始化没有被提升。...在我们声明(初始化)它们之前,它们是不可访问。 这被称为“暂时死区”。 当我们在声明变量之前尝试访问变量,JavaScript会抛出一个ReferenceError。...虽然看起来像一个数字,但它并不是一个真正数字:它有一堆额外功能,是一个对象。 当我使用==运算符只检查它是否具有相同。 他们都有3,所以返回true。...为了避免这种情况,我们可以使用“use strict”。 这可以确保在将变量赋值之前必须声明变量。 ---- 10. 当我们这样做时会发生什么?...当我传递参数,这与变量x不同。这个变量x是属于catch作用域。 之后,我们将这个块级作用域变量设置为1,并设置变量y。 现在,我们打印块级作用域变量x,等于1。

1.6K30

JavaScript 进阶问题列表

因为当我们打印 name 变量还没有执行到定义变量位置,因此变量保持为 undefined通过 let 和 const 关键字声明变量也会提升,但是和 var 不同,它们不会被初始化。...为了避免这个为题,我们可以使用 "use strict"。这能确保当你声明变量必须赋值。 ---- 10. 当我们这么做,会发生什么?...当我传递参数,这与之前定义变量 x 不同 。这个 x 是属于 catch 块级作用域。 然后,我们将块级作用域中变量赋值为 1,同时也设置了变量 y 。...---- 答案: D 通过throw语句,可以创建自定义错误。而通过,我们可以抛出异常。异常可以是一个字符串, 一个 数字, 一个 布尔类型 或者是一个 对象。...然后我们声明了变量x等于y,也是10.变量使用 let声明只作用于 块级作用域, 仅在声明块中有效;就是案例中立即调用表达式(IIFE)。

1.3K10

【前端技能树-需要避免坑】Javascript 开发者容易在花田里犯

每一秒钟,当我们调用replaceThing 都会保存一个对 priorThing 中先前 theThing 对象引用。...,每次通过循环都立即执行 makeHandler,每次都接收当时 i+1 并将其绑定到一个有作用域 num 变量。...外部函数返回内部函数(它也使用这个作用域为 num 变量),元素 onclick 被设置为内部函数。通过限定范围 num 变量,确保每个 onclick 接收并使用正确 i 。 7....在没有严格模式情况下,将赋给未声明变量会自动创建一个具有该名称全局变量。这是最常见 JavaScript错 误之一。在严格模式下,尝试这样做会抛出错误。...当尝试删除不可配置属性,非严格模式代码将静默失败,而在这种情况下,严格模式将抛出错误。 好了,上面就是想写给 Javascript 初级开发者一些问题总结。

16211

如何编写高质量 JS 函数(2) -- 命名注释鲁棒篇

四、通过函数返回结果来命名 这是个小特性,比如 shouldComponentUpdate , 为什么 should 放在最前面。 因为这个函数返回是布尔。...那么我们可以理解为这是个问句,通过问句形式来告诉我们,这里具有不确定性,需要根据返回来判断是否更新。...同时会发现,如果入参默认是 {} ,那函数里面的 obj.name 就会是 undefined ,这也不够鲁棒,所以下面就要说说函数内表达式语句鲁棒性了。...要和使用 throw 传递错误函数拥有相同上下文环境。...有几个方式可以搞定: 第一种方式:对 nodejs 来说,通常将异常处理封装成中间件,比如基于 express/koa 异常中间件,通常情况下,处理异常中间件要作为最后一个中间件加载,目的是为了捕获之前所有中间件可能出现错误

1.4K20

最失败 JavaScript 面试问题

通过分析回应,我们可以得出结论,大多数受访者在假设传递给 Promise 构造函数作为参数执行器函数是异步调用方面是错误(44%的人选择了这个选项)。...解释: 箭头函数不能用作构造函数,当使用 new 调用时会抛出错误。...要轻松记住一种编程语言是如何工作,了解为什么它是这样工作会很有帮助(简单吧!)。 这种行为是因为 const 变量而被选中。访问未定义 var 变量,我们得到undefined。...小测验3:只有36%正确答案 以下示例不推荐在实际生活中使用你应该知道这段代码至少会如何工作,以满足面试官兴趣。...无论函数和具有相同名称变量声明在代码中以何种顺序出现,函数都优先,因为上升得更高。

15520

教你如何在 React 中逃离闭包陷阱 ...

你确实需要在表单中使用它,因此你决定用 React.memo 封装,以便在表单中状态发生变化时尽量减少重新渲染。...结果是对内部声明函数引用,形成闭包。从现在开始,只要保存这个引用第一个变量是存在,我们传递给它 “first” 就会被冻结掉,并且内部函数将可以访问。...第二次调用也是同样情况:我们传递了一个不同,形成一个闭包,返回函数也将永远可以访问该变量。...如果尝试对 onClick 回调使用 Ref 而不是 useCallback 钩子,会发生什么情况呢?有些文章会建议通过这样做来 memoize 组件上 props。...我们在 onClick 中从未更新过,你能告诉为什么吗? 当然,这又是一个过期闭包。当我们创建 onClick ,首先使用默认状态undefined)形成闭包。

49540

NodeJS错误处理最佳实践

一般情况下NodeJS 会在一个空闲套接字上应用两分钟超时,这个可以覆盖,这将会泄露一个文件描述符。如果这种情况不断发生,程序会因为用光了所有的文件描述符而强退。...调试这类问题最好方法是,把 NodeJS 配置成出现未捕获异常把内核文件打印出来。...在 GNU/Linux 或者 基于 illumos 系统上使用这些内核文件,你不仅查看应用崩溃堆栈记录,还可以看到传递给函数参数和其它 JavaScript 对象,甚至是那些在闭包里引用变量...通用准则就是 你即可以同步传递错误(抛出),也可以异步传递错误通过传给一个回调函数或者触发EventEmitter error事件),但是不用同时使用。...通过不同”name“可以区分不同异常,而”errno“被用来获得系统错误详细信息。 异常被传递方式也被记录了(通过失败时调用回调函数)。

1.5K41

分享10个让人迷惑前端面试题(上)

在大多数问题中,真的不知道输出是什么,直到我自己尝试了它们,才开始慢慢理解。 所以我在这里记录它们,以便其他人可以利用它来梳理JS知识盲点。...问题2 答案: false // 删除运算符只删除对象中Key true // 当我们在任何变量之前不使用任何声明时, //它将被视为全局变量,并将作为可删除实体添加到Window对象中。...members = [ X201 ] person = null 问题4: 答案: Silver Surfer 因为当我们返回一个属性,属性等于返回,而不是构造函数中设置。...问题5 答案 使用 padStart 方法,我们可以在字符串开头添加填充。传递给此方法是字符串总长度加上填充。字符串“Silver Surfer”长度为 13。...问题6 答案 7 7 7 如果我们将字符串和数字组合传递给 parseInt,parseInt 所做是,检查错误数据类型从哪个位置开始,如果错误数据类型之前是有效数字,它将返回有效数字。

53220

金九银十: 50 个JS 必须懂面试题为你助力

增强交互 - 在界面中,当用户使用鼠标悬停或通过键盘激活它们时会做出响应。 丰富接口 - 可以使用JS包含拖放组件和滑块等项,为网站提供丰富界面。...undeclared变量是程序中不存在且未声明变量。 如果程序尝试读取未声明变量,则会遇到运行时错误。...两者之间一个区别是,原始数据类型是通过传递,对象是通过引用传递传递:意味着创建原始文件副本。...当我妈妈叫沙雕时候,虽然名字叫小智,这并不是说就突然就克隆了一个自己:仍然是,只是可以用不同名字来称呼而已。...严格模式是在代码中引入更好错误检查一种方法。 当使用严格模式,不能使用隐式声明变量,或为只读属性赋值,或向不可扩展对象添加属性。

6.5K31

【JS进阶】你真的掌握变量和类型了吗

0.1+0.2为什么不等于0.3?发生小数计算错误具体原因是什么? Symbol特点,以及实际应用场景是什么? [] == ![]、[undefined] == false为什么等于true?...2.2 引用类型 堆内存: 存储大小不定,可动态调整 空间较大,运行效率低 无法直接操作其内部存储,使用引用地址读取 通过代码进行分配空间 相对于上面具有不可变性原始类型,习惯把对象称为引用类型...因此,我们改变其中任何一个变量,另一个变量都会受到影响,这就是为什么会有深拷贝和浅拷贝原因。 2.4 比较 当我们在对两个变量进行比较,不同类型变量表现是不同: ?...undefined 表示“缺少”,即此处应有一个还没有定义, 如果一个对象某个属性undefined,这是不正常,如obj.name=undefined,我们不应该这样写,应该直接delete...)属性,是一个普通对象 3.所有的函数都具有prototype(显式原型)属性,也是一个普通对象 4.所有引用类型proto指向构造函数prototype 5.当试图得到一个对象属性,如果变量本身没有这个属性

3.2K30

工作中经常遇到前端九条 bug 分享

) 小声说: 最近实在是好多事要忙, 像3d地球那个系列只能过段时间更新了... 1: url编码操作 当我通过url来传递一些信息时候, 可能会出现一些读取问题,我们常用encodeURI与encodeURIComponent...3: 后端int64类型出错 公司内部有一个库可以把后端rpc接口规范直接转成ts规范供前端使用, 但是突然有一天出现了类型错误, 比如后端规定返回参数为code数字类型, msg为字符串类型, 那么就会生成如下文件...4: 开发时候样式好好, 打包后就出问题了 * bug 场景      明明开发时候好好, 为什么打包之后就会出现各种错误, 比如样式丢失, 这里说下原因之一: 很久之前某天把开发好前端项目代码发布到了服务器上..., 在本地访问时样式很完美, 但是当我通过测试环境url打开这个项目的时候, 竟然表格样式有些崩坏宽高与我本地不一样, 但是没有想明白bug原因, 就去与 '同学a' 交流为什么出现这种现象。...当name属性我们赋予了number类型时会导致错误。 state 对应S类型, 也就是默认any任何类型都可以。 baseReducer参数不符合规范, 或是返回不符合规范

76440

当面试官问你Promise时候,他究竟想听到什么?

正常情况下,没有任何东西可以阻止Promise向你通知决议,即使你JavaScript代码报错了,一会通过异常回调来捕获到。...4.未能传递所需环境和参数 凡是被决议都会传递到观察回调中,如果没有显示决议也会传递一个undefined给观察回调。...5.吞掉可能出现错误和异常 如果在创建Promise,存在JavaScript代码错误,会直接导致该Promise拒绝决议,那么你可以通过reject()来捕获异常,代码中任何异常都不会吞掉。...) 可以通过Promise.resolve()方法对不确定进行Promise化,返回一个Promise对象。...如果是一个立即,如一个普通变量,那么该Promise会立即决议为成功。 如果是一个Promise,那么会将该Promise直接返回赋值给这个Promise,不会有额外开销。

2.6K50

送你58道JavaScript面试题(上)

所以说, birthYear是传递,因为他是个字符串而不是对象。当我们对参数进行传递,会创建一份该 复制 。...答案: D 通过 throw语句,可以创建自定义错误。而通过,我们可以抛出异常。异常可以是一个字符串, 一个 数字, 一个 布尔类型 或者是一个 对象。...然后我们声明了变量 x等于 y,也是 10.变量使用 let声明只作用于 块级作用域, 仅在声明块中有效;就是案例中立即调用表达式(IIFE)。...当我尝试调用一个不存在函数 TypeError异常会被抛出。...当我们调用 game.next("Yes").value,先前 yield 返回将被替换为传递给 next()函数参数 "Yes"。

76220

为啥出现,我们能用它来干啥?

在这种情况下,当我尝试获取 user.address.street,而该用户恰好没提供地址信息,我们则会收到一个错误: let user = {}; // 一个没有 "address" 属性 user...这是预期结果。JavaScript 工作原理就是这样。因为 user.address 为 undefined尝试读取 user.address.street 会失败,并收到一个错误。...user.address.street : undefined); 这样可以,这里就不会出现错误了……但是不够优雅。就像你所看到,"user.address" 在代码中出现了两次。...更深层次属性是通过常规方式访问。如果我们希望它们中一些也是可选,那么我们需要使用更多 ?. 来替换 .。 不要过度使用可选链: 我们应该只将 ?. 使用在一些东西可以不存在地方。...[] 也可以使用。跟前面的例子类似,允许从一个可能不存在对象上安全地读取属性。

92340

50 个JS 必须懂面试题为你助力金九银十

增强交互 - 在界面中,当用户使用鼠标悬停或通过键盘激活它们时会做出响应。 丰富接口 - 可以使用JS包含拖放组件和滑块等项,为网站提供丰富界面。...undeclared变量是程序中不存在且未声明变量。 如果程序尝试读取未声明变量,则会遇到运行时错误。...两者之间一个区别是,原始数据类型是通过传递,对象是通过引用传递传递:意味着创建原始文件副本。...当我妈妈叫沙雕时候,虽然名字叫小智,这并不是说就突然就克隆了一个自己:仍然是,只是可以用不同名字来称呼而已。...严格模式是在代码中引入更好错误检查一种方法。 当使用严格模式,不能使用隐式声明变量,或为只读属性赋值,或向不可扩展对象添加属性。

4.4K30

再看JavaScript,那些遗漏或易混淆知识点(1)

null >= 0; // true(3) 为什么出现这种反常结果,这是因为相等性检查 == 和普通比较符 > = <= 代码逻辑是相互独立。...对于取值可能是 null/undefined 变量,请按需要分别检查取值情况。 空合并运算符 ??...可选链是ES2020新引入,是一种访问嵌套对象属性安全方式。即使中间属性不存在,也不会出现错误。...上面的代码虽说是可以,但是我们也不要过度使用可选链。看看上面这句话,前面部分是 undefined 或者 null。说明 ?. 前面的那部分我们不确定有没有。...,当我们对期望一个字符串对象执行操作 number 对象到数字转换 default 在少数情况下发生,当运算符“不确定”期望类型

69000
领券