第四章函数与作用域
- 格式:ppt
- 大小:775.00 KB
- 文档页数:15
函数级作用域和块级作用域变量作用域是指在程序中一些特定位置,变量被声明后的可访问范围。
它决定了变量在哪些地方可以被访问和使用。
变量作用域可以分为函数级作用域和块级作用域。
函数级作用域是指变量在函数内部声明后,只能在这个函数内部被访问和使用。
函数级作用域的变量在函数执行结束后会被销毁,无法在函数外部被访问。
一个经典的例子是在JavaScript中使用关键字var声明的变量,它的作用域就是函数级作用域。
举个例子来说明函数级作用域:```javascriptfunction examplvar x = 10;console.log(x);example(; // 输出10console.log(x); // 报错,x未定义```在这个例子中,变量x只能在函数example内部使用,无法在函数外部访问。
当函数执行结束后,变量x也会被销毁,因此在函数外部访问x会报错。
块级作用域是指变量在代码块内部声明后,只能在这个代码块内部被访问和使用。
代码块是由一对花括号{}包裹的一段代码。
在ES6之前的JavaScript版本中,块级作用域是不存在的,变量的作用域只能是函数级别的。
但是,在ES6中引入了let和const关键字,它们具有块级作用域的特性。
举个例子来说明块级作用域:```javascriptfunction examplif (true)var x = 10;let y = 20;}console.log(x); // 输出10console.log(y); // 报错,y未定义example(;```在这个例子中,变量x是用var关键字声明的,它的作用域是全局的,所以在if语句块内部声明的x可以在if语句块外部访问。
而变量y是用let关键字声明的,它的作用域只限于if语句块内部,所以在if语句块外部无法访问。
函数级作用域的优点是可以有效地控制变量的作用范围,避免变量冲突和污染全局作用域。
它适用于那些需要在函数内部执行一些特定任务的情况,可以避免函数之间的变量互相干扰和影响。
“语言的作用域规则”是一组确定一部分代码是否“可见”或可访问另一部分代码和数据的规则。
C语言中的每一个函数都是一个独立的代码块。
一个函数的代码块是隐藏于函数内部的,不能被任何其它函数中的任何语句(除调用它的语句之外)所访问(例如,用g o t o语句跳转到另一个函数内部是不可能的)。
构成一个函数体的代码对程序的其它部分来说是隐蔽的,它既不能影响程序其它部分,也不受其它部分的影响。
换言之,由于两个函数有不同的作用域,定义在一个函数内部的代码数据无法与定义在另一个函数内部的代码和数据相互作用。
C语言中所有的函数都处于同一作用域级别上。
这就是说,把一个函数定义于另一个函数内部是不可能的。
4.2.1 局部变量在函数内部定义的变量成为局部变量。
在某些C语言教材中,局部变量称为自动变量,这就与使用可选关键字a u t o定义局部变量这一作法保持一致。
局部变量仅由其被定义的模块内部的语句所访问。
换言之,局部变量在自己的代码模块之外是不可知的。
切记:模块以左花括号开始,以右花括号结束。
对于局部变量,要了解的最重要的东西是:它们仅存在于被定义的当前执行代码块中,即局部变量在进入模块时生成,在退出模块时消亡。
定义局部变量的最常见的代码块是函数。
例如,考虑下面两个函数。
整数变量x被定义了两次,一次在func1()中,一次在func2()中。
func1()和func2()中的x互不相关。
其原因是每个x作为局部变量仅在被定义的块内可知。
语言中包括了关键字auto,它可用于定义局部变量。
但自从所有的非全局变量的缺省值假定为auto以来,auto就几乎很少使用了,因此在本书所有的例子中,均见不到这一关键字。
在每一函数模块内的开始处定义所有需要的变量,是最常见的作法。
这样做使得任何人读此函数时都很容易,了解用到的变量。
但并非必须这样做不可,因为局部变量可以在任何模块中定义。
为了解其工作原理,请看下面函数。
这里的局部变量s就是在if块入口处建立,并在其出口处消亡的。
4个作用域的作用范围作用域是JavaScript中非常重要的一个概念,有着不同的作用范围,涵盖了变量和函数的可见度。
作用域可以分为全局作用域、函数作用域、块级作用域和动态作用域,每一个作用域都有其独特的作用范围。
1.全局作用域全局作用域是最外层的作用域,它的作用范围是整个程序。
在全局作用域中定义的变量和函数都是全局可见的,可以在程序的任何地方调用和访问。
利用全局作用域可以定义一些在整个程序中使用的全局变量和函数,比如说:var globalVariable = "Hello, world!";function globalFunc() {console.log("This is a global function.");}2.函数作用域函数作用域是在函数内部定义的作用域,它的作用范围仅限于该函数内部。
在函数作用域中定义的变量和函数只可以在函数内部调用和访问,不可以在函数外部使用。
利用函数作用域可以在函数内部定义一些局部变量和函数,保持变量的封装性,不会对其他函数或全局造成影响,比如:function localFunc() {var localVariable = "This is a local variable.";console.log(localVariable);}localFunc();3.块级作用域块级作用域是在花括号“{}”内定义的作用域,它的作用范围仅限于该块级作用域内部。
在块级作用域中定义的变量和函数只可以在该块级作用域内部或块级作用域内部嵌套的作用域中调用和访问,不可以在块级作用域外部使用。
利用块级作用域可以避免变量污染,保持变量的局部性,比如:{let blockVariable = "This is a block-scoped variable.";console.log(blockVariable);}4.动态作用域动态作用域是在函数执行时才确定的作用域,其作用范围是函数调用栈。
函数的作用域是指函数内被定义的变量的可访问性。
即变量的作用域决定了如何使用它,只有它所在的函数内才可以访问。
函数的作用域也称为词法作用域,因为它是在书写代码时就确定了的,而不是在运行时确定的。
函数作用域可以分为全局作用域和局部作用域。
全局作用域是指定义在函数外部的变量,在整个程序中都可以访问。
反之,局部作用域指定义在函数中的变量,只能在函数内部访问。
局部作用域很重要,因为它可以防止变量名称冲突,防止数据的污染,以及使函数的变量更加独立。
另外,还有一种特殊的作用域,叫做闭包,它可以让函数可以访问它被定义时的作用域,即使它已经离开了这个作用域。
总之,函数的作用域是一个重要的概念,它可以帮助我们设计出更简洁、更易于维护的程序。
《关于C语言函数的概念及其作用》
C语言函数是编程语言中用于提供功能性、可重复使用的独立模块,它可以大大改善代码的可重用性、可维护性和可读性。
概括地讲,函数就是一段可以被多次调用的程序,它接受输入参数,然后使用这些参数作为执行计算和输出运算结果。
函数可以更有效地将广泛的功能分隔开,而不必在一个程序中对所有功能都实现。
函数可以封装特定的功能,使得程序员可以使用它来实现相同的功能。
如果有一部分程序需要更改,只需要修改函数内部的代码,而不会影响主程序中其他部分的代码。
一个函数通常由四个部分组成:函数头、参数列表、函数体和返回值。
函数头是函数的声明,声明函数的类型(输入参数为何种类型),函数的名称以及相关的参数。
参数列表是传递给函数的参数,它们可以是必需的也可以是可选的。
函数体是函数的核心部分,它定义函数的功能,它可以由一行或多行语句组成。
函数的返回值是函数的结果,指函数完成任务后的最终结果会由它传回所调用的函数。
C语言函数的作用是使用最少的代码可以实现最大的功效。
它极大地改善了程序的维护性和可重用性,因为它允许程序员将一系列重复的任务放在单独的函数中,只需要一次编码即可多次使用。
此外,函数可以与其他函数一起组合,实现更高级的功能,增强代码的可读性,使代码更易于理解与调试。
函数在C语言程序中起着至关重要的作用,也是C语言编程中不可缺少的一部分。