ECMAScript 的函数实际上是功能完整的对象。

函数的理解

用 Function 类直接创建函数,格式如下。可理解为Function构造器。

var function_name = new Function(arg1, arg2, ..., argN, function_body)

通过Function类定义一个函数

var sayHi = new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");

出于效率原因我们一般不这么写。而采用下面的写法

function sayHi(sName, sMessage) {
alert("Hello " + sName + sMessage);
}

但我们只要知道所有函数都应看作 Function 类的实例函数名只是指向函数对象的引用值,行为就像其他对象一样。

怎么理解行为?函数默认有length属性,跟其他对象一样默认也有valueOf() 方法及 toString() 方法。

函数的定义

定义函数有多种方式,大致分两类,声明式和表达式

1. 最普通的,以function开头

function foo(a, b){
return a+b;
}

2. 将函数表达式赋值给一个变量

var foo = function (a, b){
return a+b;
}

立即执行表达式

(function(){
// do sth
})()

将函数对象作为表达式返回

return function(){
// do sth
}

命名的函数表达式

var add = function foo(a, b){
// do sth
};

函数声明和函数表达式的差异

如下图:使用函数声明可正确的输出结果3,但是用函数表达式定义的函数结果是undefined。

原因是,当JS执行之前。解析器会读取函数声明添加到执行环境中。对代码求值时,JS引擎在第一遍会声明函数并将它们放到源代码树的顶部。就好像先执行了function add(), 然后才执行了 var number = add()。函数被提前了。

同样的函数表达式也会被提前,也就是var add被提前,但是值是undefined。这里将undefined像函数那样去调用就报了“undefined is not a function”。

最新文章

  1. PHP的继承方法如何获取子类名
  2. linux-11 基本命令之 -工作期目录切换命令-pwd,cd,
  3. html5自带表单验证-美化改造
  4. Egret的第一个2048游戏
  5. js模拟下载
  6. SpringMVC4+thymeleaf3的一个简单实例(篇五:页面和MySql的数据交互-展示以及存储)
  7. poptest分享计划以及提供的服务
  8. ImageView最大高度和宽度失效解决方案
  9. 201521123118《java程序与设计》第10周学习总结
  10. HBase shell 命令介绍
  11. sublime下让代码居中
  12. CMDB服务器管理系统【s5day89】:采集资产之汇报信息
  13. 强大的金融类图表库 TradingView 使用分享
  14. SQLite的文件锁、并发与pager---(SQLite学习手册(锁和并发控制))
  15. unity打aar包工具
  16. ViewpagerHandler
  17. iOS中UITableView和UICollectionView的默认空态页
  18. 【Java】 二叉树的遍历(递归与循环+层序遍历)
  19. AES五种加密模式
  20. Howto: 使用ImageBrush替换PictureMarkerSymbol以加强graphic显示性能

热门文章

  1. 【转】python通过文件头判断文件类型
  2. CAShapeLayer使用
  3. UVa 658 - It's not a Bug, it's a Feature!(Dijkstra + 隐式图搜索)
  4. 苹果手机(ios系统)蓝牙BLE的一些特点
  5. redis安装和简介(2)
  6. sharePoint中简单的父页面跳转子页面代码!
  7. 【微信开发】LINUX-windows下用navicat远程链接虚拟机Linux下MySQL数据库
  8. 不用注解,获取spring容器里的bean(ApplicaitonContext)
  9. 『ACM C++』 Codeforces | 1066A - Points in Segments
  10. Yii2中使用Soap WebSerivce