javascript 函数声明与函数表达式的区别
还是一样,先上代码:
<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的花括号解析成表达式而不是代码块。
转载于:https://www.cnblogs.com/yangzhi/p/3576531.html
javascript 函数声明与函数表达式的区别相关推荐
- Javascript 函数声明和函数表达式的区别
2019独角兽企业重金招聘Python工程师标准>>> Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实 ...
- JavaScript的函数声明与函数表达式的区别
1)函数声明(Function Declaration); // 函数声明function funDeclaration(type){return type==="Declaration&q ...
- JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- js函数声明和函数表达式的区别
Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...
- JavaScript程序开发(十四)—函数声明与函数表达式
函数声明和函数表达式虽然都是在声明一个函数,但是二者有区别,解析器对二者的解析并非是一视同仁的.解析器会率先解析读取函数声明,并使其可以在执行任何代码前可用(可以访问):至于函数表达式,则必须等到解析 ...
- Javascript 学习笔记 - 函数 - 关于IIFE - 关于函数声明和函数表达式 - 个人总结
一切起源于一段代码(近来学完java基础 开始学习敲一下javascript): var getter = function(){var dayNames=["Sunday",&q ...
- javascript函数声明和函数表达式
JavaScript中定义函数最常用的方式是函数声明和函数表达式.这两种技术非常相似,有时甚至难以区分,但在后续章节中可以看到,它们之间还是存在着微妙的区别. JavaScript定义函数最基本方式是 ...
- 逆推继承看原型 函数的角色 函数声明和函数表达式的区别 函数中this指向的问题
逆推继承看原型 <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...
- 函数声明与函数表达式的区别
一. 定义函数的方式 定义函数有两种方式:函数声明和函数表达式. 函数声明的语法是这样的: function functionName(arg0,arg1){//函数体 } 首先是function关键 ...
最新文章
- python中的mysql数据库like模糊查询
- H5 canvas的 width、height 与style中宽高的区别
- 双绞线的八根线的作用
- AngularJS实现产品列表(页面搜索,排序)
- postgresql导入mysql的备份_PostgreSQL数据备份、导入转
- SPI及其工作原理浅析
- 山东大学和哈工大的教师招聘条件对比,心里要有点数
- 计算机视觉与深度学习 | K-means聚类算法在计算机视觉中的应用之图像分割
- semget创建文件_linux信号灯操作
- 实现对数组找最大最小数
- 前端学习(2835):小程序中使用less
- 从零开始用python处理excel数据_Python对Excel的操作
- Kali Linux与Ubuntu的ssh服务
- XP远程桌面连接网络无法验证解决办法
- VS2017\VS2019\VS2022项目多余文件(中间文件\临时文件)一键清理BAT
- 【渝粤题库】广东开放大学 标准化法律法规 形成性考核
- 桌面虚拟化传输协议之android spice及spice源码分析之server(1)
- Xposed FrameWork v89 安装
- 看完这套书才发现,以前的四大名著都白看了!
- Java web批量导入excel表格的数据进入数据库的实现
热门文章
- 执行插件超过2分钟超时错误,如何办?
- pythonのSocket
- Python3NumPy——数组(2)之数学空间与NumPy空间
- 8-12-COMPETITION
- [书目20140322]如何管理软件企业(第2版)
- pythonprint()_python基础1 print()函数
- 计算神经网络隐藏层节点数极小值
- 用java的io做一个代码计数器,如何制作Java页面计数器_java
- cmd安装pip_离线情况下怎么安装numpy、pandas和matplotlib?一步一步教你
- python每天定时9点执行_win10设置Python程序定时运行(设置计划任务)