函数定义表达式 定义一个js函数,表达式的值就是这个新定义的函数,从某种意义来讲,函数定义表达式可称为"函数直接量"。 一个典型的函数定义表达式包含关键字function,跟随其后的是一对圆括号,括号内是一个以逗号分隔的列表,列表含有0个或者多个标识符(参数名),然后再跟随一个有花括号包裹的js代码段(函数体)。
var square = function(x) { return x * x; }
函数定义表达式同样也可以包含函数的名字,函数也可以通过函数语句来定义,而不是函数表达式。
function square(x) { return x * x; }
调用表达式 js中的调用表达式,是一种调用(或者执行)函数或者方法的语法表示,它以一个函数表达式开始,这个函数表达式指代了要调用的函数,函数表达式后跟随一对圆括号,圆括号内是一个以逗号隔开的参数列表,参数可以有0个或者多个。
f(); Math.max(x, y, z); a.sort();
当对调用表达式进行求值的时候, 首先计算函数表达式,然后计算参数表达式,得到一组参数值。如果函数表达式的值不是一个可调用的对象,则抛出一个类型错误的异常; 然后实参的值会依次赋值给形参,这些形参是定义函数时指定的; 接下来开始执行函数体,如果函数使用return语句给出一个返回值,那么这个返回值就是整个调用表达式的值,否则调用表达式的值就是undefined。 函数调用,包括当形参表达式的个数和函数定义中实参的个数不匹配的时候,在后期会详细讲解。
任何一个调用表达式,都包含一对圆括号,和左括号之前的表达式,如果这个表达式是一个属性访问表达式,那么这个调用叫方法调用。在方法调用中,执行函数体的时候,作为属性访问主题的对象和数组便是其调用方法内this的指向。这种特性使得在面向对象编程的范例中,函数可以调用其宿主对象。 并不是方法调用的调用表达式,通常使用全局对象作为this关键字的值,然而在ECMAScript 5中,那些通过严格模式定义的函数在调用时,将使用undefined作为this的值,this不会指向全局变量。(后面会详细讲解)