首页 > 编程笔记 > JavaScript笔记 > JS函数
阅读:43
JS比较3种函数的作用域
在《JS函数定义》一节中,我们讲到了 3 种创建函数的方法,分别是:使用 function 语句、使用 function 表达式和使用 Function 构造函数。
下面分别使用这 3 种方法定义一个空函数:
这 3 中方法的详细比较如表所示。
下面分别使用这 3 种方法定义一个空函数:
function f() {} var f = function () {} var f = new Function()通过这 3 种方法创建的函数对象的 [[scope]] 属性值会有所不同,进而影响函数执行过程中的作用域链。
- 使用 function 语句的函数对象是在进入执行上下文时的变量初始化过程中创建的。该对象的 [[scope]] 属性是它被创建时的执行上下文对应的作用域链。
- 使用 function 表达式定义的函数对象是在该表达式被执行的时候创建的的。该对象的 [[scope]] 属性值与使用 function 声明创建的对象一样。
- 使用 Function 构造器声明一个函数通常使用两种方式。常用格式是 var funcName = new Function(p1,p2,...,pn,body),其中 p1,p2,...,pn 表示的是该 function 的形式参数,body 是 function 的内容。使用该方式的 function 对象是在构造器被调用的时候创建的。该对象的 [[scope]] 属性值总是一个只包含全局对象的作用域链。
这 3 中方法的详细比较如表所示。
函数定义方法 | 使用 function 语句 | 使用 Function() 构造函数 | 使用函数表达式 |
---|---|---|---|
兼容 | 完全 | JavaScript 1.1 及以上 | JavaScript 1.2 及以上 |
形式 | 句子 | 表达式 | 表达式 |
名称 | 有名 | 匿名 | 匿名 |
主体 | 标准语法 | 字符串 | 标准语法 |
性质 | 静态 | 动态 | 静态 |
解析 | 以命令的形式构造一个函数 | 解析函数体,能够动态创建一个新的函数对象 | 以表达式的形式构造一个函数对象 |
作用域 | 具有函数作用域 | 顶级函数,具有顶级作用域 | 具有函数作用域 |
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频