JS学习 函数的理解

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”。

posted @ 2013-08-27 11:53  飞凡123  阅读(192)  评论(0编辑  收藏  举报