函数类型_C语言函数类型

函数类型_C语言函数类型函数类型在ECMAScript中有三种函数类型:函数声明,函数表达式和函数构造器创建的函数。每一种都有自己的特点。1.函数声明这种函数类型的主要特点在于它们仅仅影响变量对象。该特点也解释了第二

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

函数类型

在ECMAScript 中有三种函数类型:函数声明,函数表达式和函数构造器创建的函数。每一种都有自己的特点。

1.函数声明

//函数声明(缩写为FD)是这样一种函数:
//1.有一个特定的名称
//2.在源码中的位置:要么处于程序级(Program level),要么处于其它函数的主体(FunctionBody)中
//3.在进入上下文阶段创建
//4.影响变量对象
//5.以下面的方式声明

function exampleFunc() {}

 这种函数类型的主要特点在于它们仅仅影响变量对象。该特点也解释了第二个重要点(它是变量对象特性的结果)在代码执行阶段它们已经可用(因为FD在进入上下文阶段已经存在于VO中——代码执行之前)。

例如(函数在其声明之前被调用)

foo();
 
function foo() {
  alert('foo');
}

第二点函数声明在源码中的位置:

// 函数可以在如下地方声明:
// 1) 直接在全局上下文中
function globalFD() {
  // 2) 或者在一个函数的函数体内
  function innerFD() {}
}

2.函数表达式

//函数表达式(缩写为FE)是这样一种函数:
//在源码中须出现在表达式的位置
//有可选的名称
//不会影响变量对象
//在代码执行阶段创建

这种函数类型的主要特点在于它在源码中总是处在表达式的位置。最简单的一个例子就是一个赋值声明:

var foo = function foos() {
  ...
};

在外部FE通过变量“foo”来访问foo(),而在函数内部,有可能使用名称“foos”。

如果FE有一个名称,就很难与FD区分。但是,如果你明白定义,区分起来就简单明了:FE总是处在表达式的位置。在下面的例子中我们可以看到各种ECMAScript 表达式:

// 圆括号(分组操作符)内只能是表达式
(function foo() {});
 
// 在数组初始化器内只能是表达式
[function bar() {}];
 
// 逗号也只能操作表达式
1, function baz() {};

 表达式定义里说明:FE只能在代码执行阶段创建而且不存在于变量对象中,示例:

// FE在定义阶段之前不可用(因为它是在代码执行阶段创建)
 
alert(foo); // "foo" 未定义
 
(function foo() {});
 
// 定义阶段之后也不可用,因为他不在变量对象VO中
 
alert(foo);  // "foo" 未定义

在表达式中使用它们,”不会污染”变量对象。最简单的例子是将一个函数作为参数传递给其它函数。

function foo(callback) {
  callback();
}
 
foo(function bar() {
  alert('foo.bar');
});
 
foo(function baz() {
  alert('foo.baz');
});

 3.通过函数构造器创建的函数

这种函数的[[Scope]]属性仅包含全局对象:

     var x = 10;

        function foo() {

            var x = 20;
            var y = 30;

            var bar = new Function('alert(x); alert(y);');

            bar(); // x:10, y:未定义

        }
        foo()

函数bar的[[Scope]]属性不包含foo上下文的Ao的变量y不能访问,变量x从全局对象中取得。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167167.html原文链接:https://javaforall.net

(0)
上一篇 2022年8月5日 下午3:46
下一篇 2022年8月5日 下午3:46


相关推荐

  • 防火墙的AAA认证[通俗易懂]

    防火墙的AAA认证[通俗易懂]防火墙的AAA认证防火墙的AAA提供基于三种数据库认证:LOCAL,TACACS+,RADIUS.使用tacacs+,radius两种认证协议来进行专门的AAA服务器与NAS之间进行接入访问认证。基本认证原理:客户机发起验证请求到NAS,而NAS帮助收集用户的验证信息并使用pre-sharekey与AAA服务器进行交互,AAA会对NAS提交上来的…

    2022年6月5日
    73
  • Java小程序后台管理系统

    Java小程序后台管理系统一款 Java 语言基于 SpringBoot2 x Layui Thymeleaf MybatisPlus Shiro MySQL 等框架精心打造的一款模块化 插件化 高性能的前后端分离架构敏捷开发框架 可用于快速搭建前后端分离后台管理系统 本着简化开发 提升开发效率的初衷 自研了一套个性化的组件 实现了可插拔的组件式开发方式 单图上传 多图上传 下拉选择 开关按钮 单选按钮 多选按钮 图片裁剪等

    2026年2月24日
    2
  • CIFAR-10 数据集「建议收藏」

    CIFAR-10 数据集「建议收藏」CIFAR-10数据集简介CIFAR-10是由Hinton的学生AlexKrizhevsky和IlyaSutskever整理的一个用于识别普适物体的小型数据集。一共包含10个类别的RGB彩色图片:飞机(a叩lane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog)、蛙类(frog)、马(hor…

    2022年4月19日
    42
  • 奋斗米莱经典台词[通俗易懂]

    奋斗米莱经典台词[通俗易懂]米莱,她专一,不做作,善良,敢爱敢恨。1.记住,在这个世界上,男人女人各有分工,男人主要用来对女人使坏,女人主要用来对男人好,以前我对这种混蛋分工特不满意。可是现在,我认命了。2.对夏琳:其

    2022年7月3日
    25
  • SQL聚合函数「建议收藏」

    SQL聚合函数「建议收藏」一、知识点聚合函数对组执行计算并返回每个组唯一的值。GROUPBY子句通常与聚合函数一起用于统计数据。GROUPBY子句将行排列成组,聚合函数返回每个组的统计量。常用的聚合函数有:COUNT(),SUM(),AVG(),MIN(),MAX()。COUNT(),其作用主要是返回每个组的行数,也会返回有NULL值的列,可用于数字和字符列。SUM(),主要用于返回表达式中所有的总和,忽略NULL值,仅用于数字列。AVG(),返回表达式所有的平均值,仅用于数字列并且自动忽略NULL值。MIN(),返

    2022年6月21日
    24
  • BP神经网络预测实例(matlab代码,神经网络工具箱)

    BP神经网络预测实例(matlab代码,神经网络工具箱)目录辛烷值的预测matlab代码实现工具箱实现参考学习b站:数学建模学习交流bp神经网络预测matlab代码实现过程辛烷值的预测【改编】辛烷值是汽油最重要的品质指标,传统的实验室检测方法存在样品用量大,测试周期长和费用高等问题,不适用于生产控制,特别是在线测试。近年发展起来的近红外光谱分析方法(NIR),作为一种快速分析方法,已广泛应用于农业、制药、生物化工、石油产品等领域。其优越性是无损检测、低成本、无污染,能在线分析,更适合于生产和控制的需要。实验采集得到50组汽油样品(辛烷值已通过其他方法测

    2022年6月20日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号