函数类型_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从全局对象中取得。

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • dropdownlist控件绑定数据库_xml描述的是数据的什么

    dropdownlist控件绑定数据库_xml描述的是数据的什么

  • Android Studio新手教程「建议收藏」

    Android Studio新手教程「建议收藏」AndroidStudio下载选择从AndroidStudio中文组官网进行下载:http://www.android-studio.org/如果电脑网络好,能翻墙的,可以直接从官网首页推荐的google正版链接进行下载,如:android-studio-ide-173.4720617-windows.exeRecommended如果网络不好下载失败,则可以从官方提供的百度网盘方式进行下载:http://www.android-studio.org/index.php/downloa

  • esp-idf的内存管理——tlsf算法

    esp-idf的内存管理——tlsf算法目录1最初还不是tlsf2为什么要引入tlsf3idf中使用的tlsf算法的设计与实现4源码走读参考1最初还不是tlsf2为什么要引入tlsf3idf中使用的tlsf算法的设计与实现4源码走读参考[1]半文钱的博客[2]upstream所在的github地址注意事项放到内存调试去说:用户需要关注的:内存的硬件特性(caps)内存的访问速度内存是否支持原子操作内存是否可以由CPU直接访问用户在使用时:用户自己也要对自己的应用需要使用的内存做一些安排,有的内存比

  • xshell的安装和使用_git详细教程

    xshell的安装和使用_git详细教程1、Xshell6的安装废话不多说直接上链接:链接:https://pan.baidu.com/s/1WCOxkdhLIZj7yLakWu4Tdw提取码:t3ak2、了解Xshell及其使用2.1、Xshell是什么东西?首先我们要知道Xshell是用来干什么的。Xshell其实就是一个远程终端工具,它可以将你的个人pc(个人电脑)和你在远端的机器连接起来,通过向Xshell输入命令然后他通过网络将命令传送给远端Linux机器然后远端的Linux机器将其运行结果通过网络传回个人电脑。.

  • android打开相机拍照及打开相册选择照片「建议收藏」

    android打开相机拍照及打开相册选择照片「建议收藏」照相机拍照Intentintent=newIntent();intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);//照相机拍照//需要说明一下,以下操作使用照相机拍照,//拍照后的图片会存放在相册中的,这里使用的这种方式有一个好处就是获取的图片是拍照后的原图,//如果不实用Cont

  • python格式化转换_Python进制转换format格式化[通俗易懂]

    python格式化转换_Python进制转换format格式化[通俗易懂]>>>bin(13)’0b1101’十进制转成八进制和十六进制'{0:x}’.format(20)转换成十六进制'{0:o}’.format(20)转换成八进制进制转换的时候用{0:进制}八进制转为二进制:比如八进制数(37)8拆开373用二进制表示为117用二进制表示为111合起来即为1111…

发表回复

您的电子邮箱地址不会被公开。

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