还是一样,先上代码:

<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 函数声明与函数表达式的区别相关推荐

  1. Javascript 函数声明和函数表达式的区别

    2019独角兽企业重金招聘Python工程师标准>>> Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实 ...

  2. JavaScript的函数声明与函数表达式的区别

    1)函数声明(Function Declaration); // 函数声明function funDeclaration(type){return type==="Declaration&q ...

  3. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

  4. js函数声明和函数表达式的区别

    Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实现封装.继承等,也可以让代码得到复用.但事物都有两面性,Javascrip ...

  5. JavaScript程序开发(十四)—函数声明与函数表达式

    函数声明和函数表达式虽然都是在声明一个函数,但是二者有区别,解析器对二者的解析并非是一视同仁的.解析器会率先解析读取函数声明,并使其可以在执行任何代码前可用(可以访问):至于函数表达式,则必须等到解析 ...

  6. Javascript 学习笔记 - 函数 - 关于IIFE - 关于函数声明和函数表达式 - 个人总结

    一切起源于一段代码(近来学完java基础 开始学习敲一下javascript): var getter = function(){var dayNames=["Sunday",&q ...

  7. javascript函数声明和函数表达式

    JavaScript中定义函数最常用的方式是函数声明和函数表达式.这两种技术非常相似,有时甚至难以区分,但在后续章节中可以看到,它们之间还是存在着微妙的区别. JavaScript定义函数最基本方式是 ...

  8. 逆推继承看原型 函数的角色 函数声明和函数表达式的区别 函数中this指向的问题

    逆推继承看原型 <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...

  9. 函数声明与函数表达式的区别

    一. 定义函数的方式 定义函数有两种方式:函数声明和函数表达式. 函数声明的语法是这样的: function functionName(arg0,arg1){//函数体 } 首先是function关键 ...

最新文章

  1. python中的mysql数据库like模糊查询
  2. H5 canvas的 width、height 与style中宽高的区别
  3. 双绞线的八根线的作用
  4. AngularJS实现产品列表(页面搜索,排序)
  5. postgresql导入mysql的备份_PostgreSQL数据备份、导入转
  6. SPI及其工作原理浅析
  7. 山东大学和哈工大的教师招聘条件对比,心里要有点数
  8. 计算机视觉与深度学习 | K-means聚类算法在计算机视觉中的应用之图像分割
  9. semget创建文件_linux信号灯操作
  10. 实现对数组找最大最小数
  11. 前端学习(2835):小程序中使用less
  12. 从零开始用python处理excel数据_Python对Excel的操作
  13. Kali Linux与Ubuntu的ssh服务
  14. XP远程桌面连接网络无法验证解决办法
  15. VS2017\VS2019\VS2022项目多余文件(中间文件\临时文件)一键清理BAT
  16. 【渝粤题库】广东开放大学 标准化法律法规 形成性考核
  17. 桌面虚拟化传输协议之android spice及spice源码分析之server(1)
  18. Xposed FrameWork v89 安装
  19. 看完这套书才发现,以前的四大名著都白看了!
  20. Java web批量导入excel表格的数据进入数据库的实现

热门文章

  1. 执行插件超过2分钟超时错误,如何办?
  2. pythonのSocket
  3. Python3NumPy——数组(2)之数学空间与NumPy空间
  4. 8-12-COMPETITION
  5. [书目20140322]如何管理软件企业(第2版)
  6. pythonprint()_python基础1 print()函数
  7. 计算神经网络隐藏层节点数极小值
  8. 用java的io做一个代码计数器,如何制作Java页面计数器_java
  9. cmd安装pip_离线情况下怎么安装numpy、pandas和matplotlib?一步一步教你
  10. python每天定时9点执行_win10设置Python程序定时运行(设置计划任务)