为什么我删除的函数在 Node.js 中不是 typeof“undefined”?

2024-04-25

我正在使用 Node.js。

在我的“sum”函数被删除后,我希望 typeof(sum) 返回“undefined”,但事实并非如此。

// functions are data in Javascript

var sum = function ( a,b ) { return a + b; }
var add = sum;
delete sum;
console.log ( typeof sum ); // should return undefined
console.log ( typeof add ); // should return function
console.log ( add( 1,2 ) ); // should return 3

我认为它应该返回:

undefined
function
3

但它返回的是:

function
function
3

你不应该使用delete标识符上的运算符(在范围变量、函数中 - assum- 或函数参数)。

目的delete运算符是删除对象属性.

当您声明变量、函数声明或函数参数时,这些标识符在幕后实际上是属于环境记录 http://es5.github.com/#x10.5声明它们的当前范围。

这些属性在内部明确定义为不可配置,它们无法被删除。此外,使用delete运算符被如此误解,以至于在 ES5 严格模式下,它在标识符上的使用已被完全禁止,delete sum;应该抛出一个ReferenceError.

Edit:

正如@SLacks 在问题评论中指出的那样,delete运算符确实可以使用 Firebug 控制台中的标识符,这是因为 Firebug 使用eval执行您在控制台中输入的代码,以及在执行的代码中实例化的标识符的变量环境绑定eval, are mutable,这意味着它们可以被删除,这可能是为了允许程序员在运行时删除用 eval 动态声明的变量,例如:

eval('var sum = function () {}');
typeof sum; // "function"
delete sum; // true
typeof sum; // "undefined"

您也可以在控制台上看到这是如何发生的:

这可能就是您正在阅读的书所发生的情况,作者在基于以下内容的控制台上进行了测试eval.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我删除的函数在 Node.js 中不是 typeof“undefined”? 的相关文章

  • 如何使用文档客户端更新 dynamodb 中的嵌套列表数据

    我有一个 dynamoDB 表 其中有一个包含 UserId 和列表列表的项目 它看起来像这样 Item UserId abc123 Lists id 1 title My favorite movies topMovies id 1 ti
  • 当 img.crossOrigin="Anonymous" 时,Chrome MJPEG CORS“响应无效”

    Image from origin http 192 168 1 67 5555 has been blocked from loading by Cross Origin Resource Sharing policy Invalid r
  • 在 JSON 数组中按属性查找对象

    我在获取 JSON 数据中的字符串时遇到问题 格式如下 name Alice age 20 id David last 25 id John last 30 有时它会一起改变位置 John从第三名到第二名 name Alice age 20
  • 将表单传递给 AngularJS 组件进行验证

    我正在将旧代码库迁移到 AngularJS 1 5 所推广的新组件架构 我在对较大的表单执行此操作时遇到了问题 传统上 我会附加表单验证 如下所示
  • 用于自由形式绘图的 javascript 库

    是否有一个 JavaScript 库可以让我在网页上绘图 然后保存该绘图的状态 我想使用鼠标绘制 2D 图像 然后如何存储和加载该绘图 使用 HTML5 画布 绘制图像的简单示例如下 http jsfiddle net ghostoy wT
  • 在多个 angular.js 应用程序之间共享单个服务

    我正在构建一个电子商务网站 基于 shopify 并且使用多个小型 angularjs 应用程序来处理诸如快速购物车 愿望清单 过滤产品和其他一些较小项目之类的事情 我最初使用了一个大型应用程序 具有路由和所有内容 但当我没有完整的 RES
  • 将 MVC 操作结果发送到打印机

    我有一个带有操作的控制器 SomeController ActionToBePrinted ActionToBePrinted 返回一个 html 视图 当按下按钮时 从普通的 mvc razor 视图调用此操作 当按下按钮时 我将如何将视
  • 等待承诺的 fs.writeFile 与 fs.writeFileSync

    此选项之一有一些优点吗 1 const fs require fs const testFunc1 async gt fs writeFileSync text txt hello world 2 const fs require fs c
  • 任何 JavaScript 代码都是有效的 TypeScript 代码吗?

    目前我已经开始学习TypeScript 从我研究过的文档来看TypeScript 我看到一些纯的样品JavaScript代码可以编译为TypeScript code 我的问题是 TypeScript 语言的设计方式是否使任何 JavaScr
  • 为什么 Bootstrap 需要 jQuery? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我已经多次用谷歌搜索这个问题 但从未找到满意的答案 大多数答案似乎只是说 是的 Bootstrap 插件确实需要 jQuery https st
  • React-Router v5 History.push 不触发组件

    很抱歉朋友们又问这个问题了 我找到了解决这个问题的几个方法 但他们让我很困惑 我只是想问一个优雅的方法来做到这一点 正如你通过标题所理解的 我有一个关于反应路由的问题 让我解释 我有一个按钮 其名称是Login 单击按钮后 我执行了一些逻辑
  • 节省页面加载时间的提示[重复]

    这个问题在这里已经有答案了 我的问题 削减那些不必要的 kb 并使页面加载速度更快的最佳方法是什么 全部是什么优化实践 编码实践 在js php中 如果执行可以使您的页面更轻 为什么我问这个 我读了这篇关于 jquery js 与 jque
  • ES6 Promises/在满足多个 Promise 后调用函数(不能使用 Promises.all)[重复]

    这个问题在这里已经有答案了 我正在编写 Javascript 它需要这些事件按以下顺序发生 同时触发多个 API 调用 所有调用完成且响应返回后 执行一行代码 听起来很简单 但棘手的部分是我不能使用 Promises all 因为我仍然希望
  • MongooseError:操作 `orders.deleteMany()` 缓冲在 10000 毫秒后超时

    当我运行我的应用程序时npm run seeder然后我面临这个错误 我仔细检查了我的数据库连接 没问题 另外 我检查了我的 ordermodels 文件也没有问题 我用过MongoDB的compass没有任何问题 我不知道为什么显示buf
  • crypto createHMAC 输出根据 Nodejs 版本而有所不同

    我在升级节点版本时遇到加密模块问题 创建的HMAC取决于节点的版本 您将在下面找到重现该问题的代码片段 如果我将密钥编码为 BASE64 或任何 HMAC 不依赖于 node js 版本 如果我将其编码为二进制 则当我更改 Node js
  • c3js数据标签的位置

    有没有可能的方法来更改数据上方标签的位置c3条形图 在官方文档中 很好地解释了如何通过操作 y 和 x 整数来更改 x 和 y 测量轴上标签的位置 但我没有找到任何数据标签 我试图用简单的方式指出它d3其上c3是基于但是console lo
  • 具有客户端/服务器节点设置的 Webpack?

    我正在尝试为带有节点后端服务器的 Angular2 应用程序设置基于 webpack 的流程 经过几个小时的努力 我已经成功地让客户端愉快地构建了 但我现在不知道如何集成我的服务器构建 我的服务器使用生成器 因此必须以 ES6 为目标 并且
  • 检测浏览器是否支持 contentEditable?

    There s 这个问题 https stackoverflow com questions 3497942 browser detect contenteditable features 但发布的解决方案是浏览器嗅探 我试图避免这种情况
  • 401 未经授权的帖子回复

    我一直在使用 Angular 模板制作 Node js 网站 但我无法在 DB Mongo 上创建数据 这是代码 节点路由 var Property mongoose model Property var jwt require expre
  • 对于调用另一个异步函数的异步函数,玩笑测试失败

    我正在尝试测试一个使用另一个异步函数返回的数据的异步函数 这是解释我的问题的代码 StudentInfo js export async function getData studentData imported from another

随机推荐

  • 如何在R中的approxfun()之后根据y值输入估计x值[重复]

    这个问题在这里已经有答案了 我想用approxfun或类似的方法来估计曲线的函数 然后估计x一个点的值将被赋予一个已知的y value 这是一个简化的示例 y lt seq from 1 to 10 by 1 x lt seq from 0
  • 实体框架的审计跟踪

    我在每个表中都有审计跟踪字段 InsertedBy InsertedDate UpdatedBy 和 UpdatedDate 我构建解决方案以通过覆盖 savechange 来减少冗余 public override int SaveCha
  • 我应该把我的 Hugo 网站图标放在哪里

    我正在使用 Hugo 生成静态站点 我应该把我的favicon ico file 将图标放入静态目录中 静态目录位于hugo 站点的根目录中 当您生成网站时 网站图标将被复制到public 生成站点的根
  • 使用 ffmpeg 转换真实媒体

    我有许多旧的硬壳真实媒体文件需要转换 并希望编写一个脚本来批量处理它们 我可以使用 FFMpegX 进行 Real Media gt AVI 转换 但是当我尝试使用 ffmpeg 复制转换时 它总是会出现如下错误 avi 0x10084fa
  • 用户状态(秒差距)

    我正在使用秒差距解析一个表达式 并且我想使用秒差距中的用户状态来跟踪这些表达式中的变量 不幸的是我真的不知道该怎么做 给出以下代码 import Data Set as Set inp x y z data Var V String var
  • django 在我的机器上非常慢

    我全新安装了 django 1 0 并提供了一个简单的页面 需要 5 秒才能加载 在我同事的计算机上几乎不需要时间 我使用启动服务器 python manage py testserver 我可以看到每个 GET 请求 PNG 和样式表 大
  • NodeJS 获取承诺回调挂起

    我有这个代码 fetch url then response gt const json response json console log simplest possible fetch json json where 在控制台中我得到
  • Visual Studio 中用于在 Windows 文件资源管理器中打开解决方案的快捷方式?

    Visual Studio 当前使用2013 中是否有键盘快捷键可以在Windows文件资源管理器中打开解决方案 或项目 目前 我通常必须打开解决方案资源管理器 右键单击我的解决方案或项目 然后向下滚动到 在文件资源管理器中打开文件夹 但这
  • 如何使用 printf 自定义自定义类型的输出?

    我已经阅读了很多内容专家 F 并正在致力于构建一个实际的应用程序 在调试时 我已经习惯了传递这样的 fsi 命令 以使 repl 窗口中的内容清晰可见 fsi AddPrinter fun x myType gt myType ToStri
  • 为什么叫彩虹桌呢?

    有人知道为什么叫彩虹桌吗 刚刚记得我们已经了解到有一种称为 字典攻击 的攻击 为什么不叫字典呢 因为它包含了整个可能性的 范围 字典攻击是一种尝试可能性的暴力技术 像这样 python伪代码 mypassworddict dict for
  • 如何在oracle中的字母数字列中使用order by

    在我的表的一列中 我有一个如下所示的值 Y 1 Y 2 Y 3 Y 4 Y 5 Y 6 Y 7 Y 8 Y 9 Y 10 Y 11 Y 12 Y 13 Y 14 当我按此列排序时 如果该行的值高达 Y 9 则它工作正常 否则我的结果是错误的
  • 使用objectid解析ios wherekey

    In my Message Parse 中的表有一个名为对话的字段 它是一个pointer to a Conversation 我的数据库中的另一个表 查询一个Message 我可不可以做 PFQuery messageQuery PFQu
  • MVC 6 中的捆绑和缩小

    看起来捆绑和缩小不再内置于 MVC 6 中 因为不再有App Start and Bundle Config 最终版本发布后会出现这种情况吗 我猜应该使用 Grunt 因为它似乎已融入 Visual Studio 2015 中 UPDATE
  • UIWebView 和 NSURLConnection 共享 cookie 存储吗?

    我正在构建一个使用 Google App Engine 作为后端的 iOS 应用程序 Google 提供了一个存储身份验证 cookie 的 HTML 登录站点 如果我在 UIWebView 中访问该站点并且用户登录 那么这些 cookie
  • XNA 4:导入 FBX 问题

    我在从 FBX 文件导入 3D 模型时遇到问题 源模型包含 575 个对象 1 个相机 如下所示 http habreffect ru files 23d 542fa7f67 source model png http habreffect
  • 如何检查.NET Core中是否存在配置节?

    如何检查配置节是否存在于appsettings json在 NET Core 中 即使某个部分不存在 以下代码也将始终返回一个实例化实例 e g var section this Configuration GetSection
  • Xcode10 - dyld:未加载框架中安装的 pod 的库

    我有一个带有目标框架的项目 主应用程序目标 框架A FrameworkA 是唯一使用某个 pod 的框架 因此在我的 pod 文件中我有类似的内容 target MainAppTarget do end target FrameworkA
  • 从更新面板异步回发后保持滚动位置

    我在使用 ASP NET 和更新面板时遇到一些问题 问题是 每次从更新面板发生部分回发时 页面都会滚动回顶部 在我的大多数页面上 这并不是一个大问题 但在某些页面上可能会变得很长 然后 当用户位于页面底部时 我显示 jQuery 弹出窗口R
  • 在 Sublime Text 3 中,我可以将 do 文件的选择发送到 Stata 吗?

    This SO question https stackoverflow com questions 18361667 is there a command line editor that highlights the stata syn
  • 为什么我删除的函数在 Node.js 中不是 typeof“undefined”?

    我正在使用 Node js 在我的 sum 函数被删除后 我希望 typeof sum 返回 undefined 但事实并非如此 functions are data in Javascript var sum function a b r