前向引用的概念

前向引用的概念很简单,简单的理解就是使用变量前要先声明,如果使用了未声明的变量,就属于前向引用。

以JavaScript写一段代码来做一个简单示例。

console.log(nott); // Uncaught ReferenceError: nott1 is not defined
let nott = ‘我还没被定义呢你就想引用我‘;

这里,因为nott的定义在console.log之后,所以就会报nott未定义的错误,这就是前向引用。

另外的我们再来看一个例子。

console.log(nott); // undefined
var nott = ‘我还没被定义呢你就想引用我‘;

这里不会报错,是因为JavaScript语法的特殊性,它使用var关键字会有一个声明提升的特性,即变量/函数的声明会提前到最前面,赋值则保留在原位置。因此打印出来的值是undefined,这也是前向引用导致的问题。

因此我们在使用变量之前必须要检查变量是否已经定义,否则就会因为前向引用而导致非预期的问题。当然了,使用一些强大的IDE会为我们检查出这些问题并给予提示。

事实上,前向引用这个概念可以从变量扩展到函数、类等。在未定义【某个东西】前使用这【某个东西】,就叫做前向引用。我想你那么聪明,一定能依此类推的。

"我们都曾经认为,有许多事情是不可以放手的。"

原文地址:https://www.cnblogs.com/yanggb/p/11166797.html

时间: 2024-10-11 21:12:10

前向引用的概念的相关文章

强、软、弱和虚引用的概念

本文介绍对象的强.软.弱和虚引用的概念.应用及其在UML中的表示. 1.对象的强.软.弱和虚引用   在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用.图1为对象应用类层次. 图1 ⑴强引用(StrongReference)    强引用

java 报错非法的前向引用

今天在看<thinking in java>的时候,第四章提到了非法的前向引用,于是自己试了一下,书中的例子倒是一下就明白了,但是自己写的一个却怎么也不明白,于是上网问了一位前辈,终于明白啦! 这个是错误的代码: class BB { static int a = 0 ; public BB() { a++ ; System.out.println("执行BB" + a) ; } public void printA() { System.out.println("

iOS开发类别的前向引用

类别(category)除了可以对类进行扩展外,前向引用的能力也很强大.对于一些私有的方法(没有在.h文件里面声明的方法)如果我们想使用的话,有的使用的是performSelector来执行动态调用,这样完全可以调用私用方法,但是这样完全避开了编译器的语法检查,有时候未必是一种好的方法.使用类别来进行前向引用可以解决这个问题. 定义一个item类 @interface ZJItem : NSObject - (void)info; @end .m文件 @implementation ZJItem

Javac编译时报“非法的前向引用”,以及Eclipse自带的Java编译器的缺陷

编译以下类的时候,如果切换WARNING_LEVEL的赋值方式为"= StatusDef.WARNING",javac会报"非法的前向引用". Eclipse自带的编译器会编译通过,这是Eclipse编译器的一个缺陷. 产生这个编译错误的原因是,cinit方法是按照字段在源码中的声明顺序依次执行各个初始化代码段. 对于ForwardReference类,cinit方法依次执行以下功能: 通过NORMAL_LEVEL的数值,创建C0000_1字段. 在ForwardR

引用的概念

参考地址:http://xinklabi.iteye.com/blog/653643 一.引用的概念 引用引入了对象的一个同义词.定义引用的表示方法与定义指针相似,只是用&代替了*.例如: Point pt1(10,10);Point &pt2=pt1; 定义了pt2为pt1的引用.通过这样的定义,pt1和pt2表示同一对象.需要特别强调的是引用并不产生对象的副本,仅仅是对象的同义词.因此,当下面的语句执行后:pt1.offset(2,2):pt1和pt2都具有(12,12)的值.引用必须

Python之函数、参数、局部全局变量、前向引用、递归

函数 函数:实现某种功能(数学形式.python def函数式编程) 过程:就是函数没有返回值 参数 1.形参 实参 位置参数 关键字参数 默认参数 1 # 形参x,y不分配内存空间 实参2,3在调用的时候才分配空间,调用完毕就释放空间 2 def calc(x, y): 3 res = x ** y 4 return res 5 6 7 c = calc(2, 3) 8 print(c) 9 10 11 def test(x, y, z): 12 print(x) 13 print(y) 14

C++类的组合、前向引用声明

3.5类的组合 Part1.应用背景 对于复杂的问题,往往可以逐步划分为一系列稍微简单的子问题. 解决复杂问题的有效方法是将其层层分解为简单的问题组合,首先解决简单问题复杂问题也就迎刃而解了. 在面向对象的程序设计中,可以对复杂对象进行分解.抽象,把一个复杂对象分解为简单对象的组合,由比较容易理解和实现的部件对象装配而成. Part2.定义及代码 ①定义:类的组合描述的就是一个雷内嵌其他类的对象作为成员的情况,他们之间的关系是一种包含与被包含的关系. ②作用机制:当创建类的对象时,如果这个类具有

Python引用的概念

Python中常量的概念其实是对象的概念(所谓在Python中,万物皆对象),所有的赋值操作都是变量对操作数对象的引用.在Python中,每一个变量都有一个独一无二的id,可以称之为变量地址,用id()方法查看(如图1).其中右边的字符串可以看作为一个字符串对象,而左边为这个字符串对象的引用.我们现在通过sys.getrefcount()方法来查看第一次引用时,变量内部的引用计数器的初始值为多少(如图2).此处需要解释一下,一般来说第一次引用它的引用计数器应为1,但此时为2(也会为3或者其他值)

linux新手入门前知道的一些概念

前言: 这篇文章是结合自己从小白开始学linux到工作中运用linux系统,以新手怎么理解的角度来说说linux系统,希望能给想学习linux的新手带来一些帮助. 引子:随着互联网技术不断更新,企业对系统服务需求,linux系统渐渐形成IT行业的大趋势.高效率的命令化,不占硬件资源,系统开源等在服务器系统居高不下,也成为IT人员学习新技术的平台对象. 对于有IT行业经验的人来说,习惯了一些语言,linux学习并不难.对于没有任何经验的新手了解linux系统界面(包括安装系统)可能都需要大半天,l