引言

当 JavaScript 执行的时候,每遇到一个可执行代码就会创建一个执行上下文。了解 JavaScript 可执行代码的种类,对于我们理解执行上下文的概念至关重要。

JavaScript 可执行代码分为 3 类:全局代码、函数代码、Eval 代码。其中,Eval 代码我们并不常用。

全局代码

全局代码是指写在一个 JavaScript 文件中或者嵌入 HTML 中的可被 ECMA 脚本程序处理的源代码文本,这些源代码文本不包括函数体部分的源代码文本。例如,下面的示例是一段全局代码的源代码文本:

let str = 'hello world';function foo() {  // 函数体中的代码  // 不算全局代码}console.log(str); // hello world

函数代码

函数代码是指作为函数体被解析的源代码文本。例如,foo 函数体的源代码文本:

function foo() {  console.log('I like JavaScript'); // 函数代码  console.log('hello world'); // 函数代码}/* *函数代码 *console.log('I like JavaScript'); *console.log('hello world');*/

一个函数代码不包括其嵌套函数的函数代码,例如,foo 函数的函数代码,不包括内部 bar 函数的函数代码:

function foo() {  function bar() {    console.log('hello world'); // bar 函数的函数代码   }  console.log('I like JavaScript'); // foo 函数的函数代码}

如果用 new Function 的方式建立一个函数,调用 Function 构造器时,传入的最后一个参数将被转换成字符串作为函数体。

同样,构造器函数内部嵌套函数的函数代码也不属于构造器的函数代码,例如,sum 函数代码不包括 foo 函数代码:

let sum = new Function(  'a',  'b',   // sum 函数的函数代码  // 但不包括其中 foo 函数的函数代码  'function foo() { return a + b; } console.log(a * b , foo());'); sum(1, 2);

Eval 代码

Eval 代码是指传递给 eval 函数的参数部分的源代码文本,此时参数部分将成为可执行的代码。

调用 eval 时,代码中 eval() 这个调用指令本身属于全局代码的一部分,参数才是 eval 代码:

eval('console.log("hello world");');  // eval 的字符串参数为 eval 代码

总结

JavaScript 可执行代码分为 3 类:全局代码、函数代码、Eval 代码。

  • 全局代码不包括函数体。
  • 函数代码不包括其嵌套函数的函数代码,当用 new Function 构造器创建函数时,最后一个字符串参数为函数代码。
  • eval 函数的参数是 Eval 代码。

文章中图片来源于网络,若有侵权行为,请在后台与我联系。

javascript代码_认识 JavaScript 可执行代码相关推荐

  1. javascript原型_使用JavaScript的示例报告卡Web应用程序原型

    javascript原型 Hi! At times, beginners always find it hard getting the application of the theory they ...

  2. javascript 模板_了解JavaScript中的模板文字

    javascript 模板 The author selected the COVID-19 Relief Fund to receive a donation as part of the Writ ...

  3. 打字游戏代码_下一个打字稿代码的5大专业技巧

    打字游戏代码 JavaScript与TypeScript (JavaScript vs TypeScript) JavaScript started its journey a few decades ...

  4. vscode中怎样格式化js代码_如何在Visual Studio代码(VSCode)中格式化代码

    回答(30) 2 years ago 对于那些想要自定义要格式化的JavaScript文件的人,可以使用 JSfiles 属性上的任何扩展名同样适用于HTML . { "beautify.o ...

  5. javascript教程_最好JavaScript教程

    javascript教程 JavaScript is the most widely used scripting language on Earth. And it has the largest ...

  6. 史上最烂代码_历史上最大的代码库

    史上最烂代码 Here's a diagram of the biggest codebases in history, as measured by lines of code: 这是历史上最大的代 ...

  7. html5网页中的表格教程,javascript程序设计_达内javascript教程-达内web前端培训

    JavaScript基础 - 输出星星 var oT1 = document.getElementById('txt1'); var oT2 = document.getElementById('tx ...

  8. javascript 注入_注入JavaScript牟利:如何检测和阻止撇取者

    javascript 注入 In 2019 British Airways was fined a remarkable £183 million for a data breach of its s ...

  9. 一段堆栈溢出的代码_为什么堆栈溢出的代码片段会破坏您的项目

    一段堆栈溢出的代码 Stack Overflow has been the saviour of many programmers, including me. Some of us have nev ...

  10. python测验5 函数和代码_测验5: 函数和代码复用 (第5周)-单选题

    1.以下选项不是函数作用的是:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬ A. 提 ...

最新文章

  1. 使用VScode开发ESP8266,PlatformIO开发ESP8266
  2. Oracle 数据库数据排名函数:rank() 和dense_rank() 。
  3. SSH三大框架注解整合(二)
  4. JDBC的开发流程是什么?
  5. 开发工具链(国内项目)(持续更)
  6. 安卓模拟器切换横屏之后怎么返回竖屏
  7. 服务器存储满了进不去系统,解决PC常见问题 篇四十五:建议收藏!手贱升级进不去系统?两步简单恢复黑群晖!...
  8. 虚幻引擎2D游戏开发教程系列
  9. 华为小程序怎么弄出来_华为手机窗口小程序 华为窗口小程序怎么弄出来
  10. 键盘无响应-如何修复键盘注册表
  11. 微信聊天自动解析html文本,微信小程序纯文本实现@功能
  12. 线性代数之从线性方程组看线性组合
  13. 视频处理指定颜色的提取
  14. 【音频处理】视频加速音频不变调
  15. C语言进阶(牟海军)
  16. [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)
  17. BOM操作(浏览器对象模型)
  18. 海信将在柏林IFA推出屏幕发声激光电视
  19. 12864c语言接温度计,单片机万年历+温度计+12864LCD液晶显示 仿真+程序
  20. C语言小函数——atol(自己实现)

热门文章

  1. Spring Aop中@Pointcut用法
  2. mysql中文乱码--存入mysql里的中文变成问号的解决办法
  3. webpack手动构建vue和vue-cli构建使用 px2rem-loader ,全局自动转换px单位,让自适应来的更简单点!...
  4. 如何创建带有.的文件夹
  5. Python学习-生成器
  6. 通过JS语句判断WEB网站的访问端是电脑还是手机
  7. 陕西西咸新区沣西新城大数据产业发展思考
  8. ImportError: No module named matplotlib.pyplot
  9. Cisco实例1—构建高可用性DM×××网络2—方案设计
  10. S3C6410 SD卡启动uboot分析(详细)