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的花括号解析成表达式而不是代码块。


猜你喜欢
- 本文实例分析了PHP中怎样防止SQL注入。分享给大家供大家参考。具体分析如下:一、问题描述:如果用户输入的数据在未经处理的情况下插入到一条S
- for x in ...循环 就是把每个元素代入变量x,然后执行缩进块的语句。range()函数,可以生成一个整数序列,再通过list()函
- 最近研究正则表达式。看到很多朋友需要IP地址的正则表达式,网上找了一下,一开始就找到了月光博客网站模板上的找了半天没有找到完整解决IP地址的
- function AutomateExcel() { try { //Start Excel and get Application obj
- package dao;import org.hibernate.HibernateException;import org.hiberna
- MySQL存储过程SAVEPOINT ROLLBACK to示例如下:DELIMITER $$DROP PROCEDURE IF EXIST
- Jira提供了完善的RESTful API,如果不想直接请求API接口可以使用Python的Jira库来操作JiraJira Python文
- 1、前言在Python中元组是一个和列表非常类似的数据类型,不同之处就是列表中的元素可以修改,而元组之中的元素不可以修改。2、定义和使用元组
- 在JavaScript中存在这样两种原始类型:Null与Undefined。这两种类型常常会使JavaScript的开发人员产生疑惑,在什么
- 这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以
- 比较好的地方就是js数组的操作,不重复的数组id显示,完美实现。<script language="JavaScript&q
- cos()方法返回x弧度的余弦值。语法以下是cos()方法的语法:cos(x)注意:此函数是无法直接访问的,所以我们需要导入ma
- 问题描述由于画图时plt.title()默认是显示英文,如果我们设置标题为中文,会无法显示,如图:plt.title('训练损失
- 1、引言选择排序里面主要讲了三个排序,分别是简单选择排序、树形选择排序、堆排序。今天这篇文章主要讲树形选择排序,树形选择排序也被称为锦标赛排
- 关于mysql的读写分离架构有很多,百度的话几乎都是用mysql_proxy实现的。由于proxy是基于lua脚本语言实现的,所以网上不少网
- 前言在日常开发中,我们往往会将 JSON 解析成对应的结构体,反之也会将结构体转成 JSON。接下来本文会通过 JSON 包的两个函数,来介
- 下面为您介绍sql下用了判断各种资源是否存在的代码,需要的朋友可以参考下,希望对您学习sql的函数及数据库能够有所帮助。-- 库是否存在if
- 熬了半个通宵,写出了自己的Google SiteMap文件,在这里给出详细编写教程,愿对大家有所帮助。Google SiteMap的作用及协
- 实例如下所示:#!/usr/bin/python# -*- coding: UTF-8 -*-import reimport urllib,
- 什么是PHPPHP代表了"超文本处理器",这意味着你必须知道,它是一种服务器端的处理语言,且以HTML的形式出现。它最常