`
apple_wxs
  • 浏览: 104570 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

声明式函数 与 函数表达式 的解析顺序

阅读更多
看这两个例子
<html>
<head>
	<title>声明式函数 与 函数表达式 的解析顺序1</title>
</head>
<body>
文档加载运行前,声明式函数最先被解析器解析,而函数表达式 是代码运行到它那行时,它才被解析
<br>
另外 如果文档中含有 多个同名的 声明式函数,则以文档后面的为准,因为代码从前向后找,如果有同名,会用后面的覆盖前面的
<br>
这里,虽然文档加载运行前,声明式函数t1先被解析器解析,<br>
但是当文档开始运行时,函数表达式t1 被解析了,所以它覆盖了 声明式函数t1,<br>
从而导致了页面的信息 是三个 new new t1
<hr/>
<script>
<!--
	function dwn(s)
	{
		document.write(s + "<br/>");
	}
	t1=function()  //用函数表达式给t1重新赋值
	{
		dwn("new new t1");
	}
	t1();
	function t1()  //声明式函数
	{
		dwn("t1");
	}
	t1();
	function t1()  //重新声明了一个新的t1
	{
		dwn("new t1");
	}
	t1();
	
-->
</script>
</body>
</html>

<html>
<head>
	<title>声明式函数 与 函数表达式 的解析顺序2</title>
</head>
<body>
这里,函数表达式t1 在前面两次t1() 调用之后被解析的,<br>
所以前两个t1() 的输出是按照<br>
"如果文档中含有 多个同名的 声明式函数,则以文档后面的为准,因为代码从前向后找,如果有同名,会用后面的覆盖前面的"</br>
这个原则执行的,最后一次调用t1() 之前,t1 被函数表达式t1 覆盖了,所以结果为 new new t1
<hr/>
<script>
<!--
	function dwn(s)
	{
		document.write(s + "<br/>");
	}
	
	function t1()  //声明式函数
	{
		dwn("t1");
	}
	t1();
	function t1()  //重新声明了一个新的t1
	{
		dwn("new t1");
	}
	t1();
	t1=function()  //用函数表达式给t1重新赋值
	{
		dwn("new new t1");
	}
	t1();
	
-->
</script>
</body>
</html>

分享到:
评论

相关推荐

    表达式解析之表达式树的建立

    在编程领域,表达式解析是将输入的数学或逻辑表达式转换为计算机可理解的形式的过程。这个过程通常涉及构建表达式树,它是一种数据结构,能够直观地表示出表达式的结构。本文将深入探讨表达式树的建立及其在脚本解析...

    C#表达式解析器-1.0

    《C#表达式解析器-1.0:深入解析与应用》 在编程领域,表达式解析器是一种至关重要的工具,它能够理解并处理由程序员编写的数学或逻辑表达式,将其转化为计算机可执行的形式。C#表达式解析器正是这样一种实现,尤其...

    简单实用的表达式解析器

    在IT领域,表达式解析器是一种至关重要的工具,它能够理解和转换输入的数学或逻辑表达式,以便计算机能够执行这些表达式。在这个“简单实用的表达式解析器”项目中,我们可以从给定的文件中了解到一些核心概念和技术...

    java表达式解析,附加

    在Java编程语言中,表达式解析是程序设计中的一个关键环节,它涉及到将人类可读的数学或逻辑表达式转化为计算机能理解的形式。这个过程通常由编译器或解释器执行,以便执行相应的计算或操作。这篇博客文章,虽然链接...

    js中函数声明与函数表达式

    总结来说,理解JavaScript中的函数声明和函数表达式之间的差异是至关重要的,因为这会影响到代码的执行顺序和可访问性,从而可能引发预期外的错误。在编写JavaScript代码时,应根据具体需求选择合适的函数定义方式,...

    算术表达式解析模板代码 逆波兰

    在本压缩包文件“ExpressionParse”中,我们可以期待找到关于算术表达式解析和逆波兰表示法的模板代码,这将涉及到递归算法的实现。 逆波兰表示法的优势在于,通过栈数据结构可以高效地进行表达式计算,避免了...

    【转】表达式解析器

    在本文中,我们将深入探讨“表达式解析器”的概念,特别是在C++环境下如何实现一个能够处理四则运算、三角函数、开方以及幂运算的解析器。表达式解析器是编程语言理论的一个重要组成部分,它负责将人类可读的数学或...

    JS声明式函数与赋值式函数实例分析

    这两者之间的差异主要体现在代码的解析顺序和作用域上。 **声明式函数**(function declaration) 声明式函数,也称为函数定义,是通过`function`关键字来声明的。例如: ```javascript function Fn() { alert(...

    Oracle正则表达式函数全面解析

    ### Oracle正则表达式函数全面解析 #### 一、引言 在数据库处理文本数据时,经常需要用到模式匹配。Oracle数据库提供了丰富的正则表达式函数,这些函数可以帮助开发者更高效地进行文本匹配、搜索和替换等操作。本文...

    VC++中运算表达式字符串解析求值(四则运算,三角和反三角函数等)

    首先,我们需要理解表达式解析的基本概念。解析表达式是将字符串形式的数学表达式转化为计算机可理解的形式的过程。在这个案例中,我们关注的是包含加法(+)、减法(-)、乘法(*)、除法(/)、括号(())以及...

    基于表达式解析的计算器程序

    在编程领域,基于表达式解析的计算器程序是一个基础但重要的概念,它涉及到计算机科学的核心——算法和数据结构。此类程序的主要任务是接收一个数学表达式,然后将其转换为可执行的计算步骤,最终得出结果。这里我们...

    Java编程艺术-表达式解析器.rar

    本话题聚焦于Java编程艺术中的一个关键环节——表达式解析器,它允许我们处理和求值数学或逻辑表达式。在给定的“Java编程艺术-表达式解析器.rar”压缩包文件中,我们可以深入学习如何在Java中构建这样一个工具,以...

    JavaScript中的函数声明和函数表达式区别浅析

    在ECMAScript规范中,函数声明的解析和函数表达式的解析存在差异。函数声明会在当前执行上下文的代码执行前进行提前(hoisting),这意味着不论函数声明在代码中的位置如何,它总是被解析器先识别并定义,因此在声明...

    浅析函数声明和函数表达式——函数声明的声明提前

    JavaScript中的函数是语言的核心组成部分,尤其在动态类型的特性下,函数声明和函数表达式扮演着重要角色。在本文中,我们将深入探讨这两种函数定义方式,特别是重点解析函数声明的声明提前(Hoisting)现象。 首先...

    用C++编写的常量表达式解析类

    本文将详细讲解一个基于C++编写的常量表达式解析类的设计与实现,以及其内在的算法思想。 首先,这个表达式解析类是基于二叉树结构来实现的。二叉树是一种常见的数据结构,它的每个节点最多有两个子节点,通常用来...

    Test03_表达式解析_;公式计算_

    在IT领域,表达式解析和公式计算是两个关键的概念,特别是在软件开发、数据分析以及科学计算中广泛应用。本文将深入探讨这两个主题,以便更好地理解和利用它们。 首先,我们来看"表达式解析"。表达式解析是计算机...

    表达式解析

    在IT领域,表达式解析是计算机科学中的...理解和掌握表达式解析原理与技术,对于开发编译器、解释器以及编写任何需要处理用户输入的程序都至关重要。同时,利用合适的工具和库可以极大地提高解析表达式的效率和准确性。

    计算器【解析数学表达式】

    这个计算器的设计与实现涉及到计算机科学中的多个核心知识点,包括递归算法、表达式解析、数据结构以及课程设计的基本原则。下面我们将逐一深入探讨这些主题。 首先,递归算法在解析数学表达式中扮演着至关重要的...

    js代码-函数声明 和 函数表达式 的区别

    1. **执行顺序**: 函数声明在代码执行前被处理(提升),而函数表达式在遇到它们时才会被解析。 2. **可命名性**: 函数表达式可以是匿名的,而函数声明总是有名字的。 3. **作用域**: 在块级作用域(如`if`语句或`...

Global site tag (gtag.js) - Google Analytics