javascript 函数声明与函数表达式的区别介绍

时间:2024-04-23 09:08:50 

还是一样,先上代码:


<script>
var f = function g() {
return 1;
};
if (false) {
f = function g(){
return 2;
};
}
alert(g()); // 2
</script>


把这段代码扔到IE 6 里面和chorme里面是完全不同的两种效果。

这里输出2 是在ie6里面的效果,如果在chorme会出现g没有定义。

这也算是JScript的bug吧。

在这里很明显,这里的只是定义了g的函数表达式而已。包括在if的条件语句中,也只是定义了函数表达式,没有去声明函数。

那么这样直接访问肯定是会出错的。

那么对于何为声明,何为函数表达式呢?

在ECMAScript中,创建函数的最常用的两个方法是函数表达式和函数声明,两者期间的区别是有点晕,因为ECMA规范只明确了一点:函数声明必须带有标示符(Identifier)(就是大家常说的函数名称),而函数表达式则可以省略这个标示符:
函数声明:
function 函数名称 (参数:可选){ 函数体 }
函数表达式:
function 函数名称(可选)(参数:可选){ 函数体 }

所以,可以看出,如果不声明函数名称,它肯定是表达式,可如果声明了函数名称的话,如何判断是函数声明还是函数表达式呢?ECMAScript是通过上下文来区分的,如果function foo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式,如果function foo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。

还有一种函数表达式不太常见,就是被括号括住的(function foo(){}),他是表达式的原因是因为括号 ()是一个分组操作符,它的内部只能包含表达式。

你可能会想到,在使用eval对JSON进行执行的时候,JSON字符串通常被包含在一个圆括号里:eval('(' + json + ')'),这样做的原因就是因为分组操作符,也就是这对括号,会让解析器强制将JSON的花括号解析成表达式而不是代码块。

标签:函数声明,函数表达式
0
投稿

猜你喜欢

  • JS forEach跳出循环2种实现方法

    2024-04-29 13:19:28
  • Python 使用 Pillow 模块给图片添加文字水印的方法

    2022-06-13 04:13:37
  • Webpack基础教程之名词解释

    2022-12-17 19:04:30
  • 基于mysql全文索引的深入理解

    2024-01-15 15:28:41
  • python tkinter实现彩球碰撞屏保

    2021-12-31 15:12:29
  • python实现学生成绩测评系统

    2023-08-09 19:40:56
  • PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT

    2023-09-08 08:07:37
  • Laravel操作redis和缓存操作详解

    2023-05-25 02:19:29
  • Django配置跨域并开发测试接口

    2022-03-20 21:29:08
  • 使用Pyhton 分析酒店针孔摄像头

    2022-04-16 18:59:24
  • ASP中生成文件的两种方式

    2007-08-30 09:49:00
  • python Elasticsearch索引建立和数据的上传详解

    2021-03-25 23:26:35
  • perl脚本实现限制ssh最大登录次数(支持白名单)

    2022-04-09 02:56:56
  • Symfony核心类概述

    2023-11-17 13:59:48
  • React实现表格选取

    2023-08-25 02:56:17
  • Python实现的json文件读取及中文乱码显示问题解决方法

    2022-05-18 16:41:15
  • 960 Grid System 基本原理及使用方法

    2009-02-28 13:35:00
  • MySQL数据库优化之分表分库操作实例详解

    2024-01-20 10:33:53
  • python、Matlab求定积分的实现

    2021-08-25 15:43:28
  • 深入理解python多进程编程

    2023-03-20 09:07:20
  • asp之家 网络编程 m.aspxhome.com