javascript - 为什么 Javascript 内置方法/函数是用 C/C++ 而不是 JS 语法编写的

标签 javascript v8

这个问题引用了这个老问题Where-can-i-find-javascript-native-functions-source-code

该页面上的答案说,源代码是 cc++ 但我很好奇为什么源代码(定义)是这些语言?我的意思是它们是 JS 函数定义,例如 toString() 方法。它是一个 JavaScript 函数,所以它的定义必须使用 Javascript 语法编写。

toString; 在 chrome 控制台输出 function toString() { [native code] }

如果它是用户定义的函数,那么您可以看到定义,但看不到 toString() 或其他内置函数 毕竟它们只是函数/方法,必须在 JavaScript 语法中定义,引擎才能正确解释它们。

我希望你能明白我想表达的意思。

最佳答案

正如评论中所指出的,您对 JavaScript 的工作原理存在根本性的误解。

JavaScript 是一种脚本 语言,就该术语的最纯粹意义而言,即它旨在编写主机环境 脚本。它旨在嵌入到更大的系统(在本例中为用 C/C++ 编写的 Web 浏览器)中,以有限的方式操纵该系统。

其他的例子还有 unix 的脚本语言 bash,sublime 文本编辑器的脚本语言 python,emacs 的脚本语言 elisp,魔兽世界的脚本语言 lua 等等。

当我们说一个功能是“内置”时,我们的意思是它实际上是托管环境(例如网络浏览器)的功能,而不是脚本语言 (JavaScript) 的功能。

尽管 JavaScript 标准强制要求某些内置函数,但这意味着符合标准的主机环境需要公开该功能,而不管底层实现使用的是什么语言。

关于javascript - 为什么 Javascript 内置方法/函数是用 C/C++ 而不是 JS 语法编写的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39944950/

相关文章:

javascript - 使用 jQuery 从多个表中删除行

javascript - 在图像上添加动态文本

javascript - 使用 "using strict"作为 "use strong"的备份

c++ - 在 Node.js 插件的 void * 中检索和存储 V8 对象

javascript - 另一种获取数组 Javascript 整数的所有组合的方法

javascript - knex.where容易受到sql注入(inject)攻击吗?

c++ - 将字节数组作为 std::vector<char> 从 Node.js 传递到 C++ Addon

node.js - Node.js 中的 "CrankShaftScript"是什么?

JavaScript:是否可以为 'debugger' 起别名?

Javascript 函数不起作用