第四版第七章 函数
1.函数的return语句.
原文:函数的return语句将停止函数的运行,并把表达式的值返回给函数调用者,如果函数不包含return语句,它就执行函数体中的每条语句,然后返回给函数调用者undefined;
备注:为了便于链式操作,return返回的值应该考虑其重用度.通常我们使用语句if(condition) return;让不具备执行条件的函数终止运行.
2.函数的参数
原文:函数调用时,先要计算括号之间指定的所有表达式,然后把他们的结果作为函数的参数;
备注:None
3.构造函数Function()
原文:传递给构造函数Function()的参数中没有一个用于说明它要创建的函数名,用Function()构造函数创建的未命名函数有时被称为匿名函数;
备注:使用直接量/字面量也可以创建匿名函数;
原文:Function构造函数允许我们动态地创建和编译一个函数,它不会将我们限制在function语句预编译的函数体中,负面效应是每次调用一个函数,Function()构造函数都要对它进行编译
备注:预编译原理,待填充
4.函数直接量/字面量
原文:function语句/Function()构造函数和函数直接量定义三个基本相同的函数
function f(x){retrun x*x};var f = new Function('x','return x*x');var f = function(x) {return x*x};
备注:函数直接量与Function构造函数的区别(第四版11.5)
- (1)构造函数允许在运行时动态的创建和编译代码,但是函数直接量却是程序结构的一个静态部分;
- (2)每次调用构造函数都会解析函数体并且创造一个新的函数对象,如果对构造函数的调用出现在一个循环中,或者出现在一个经常被调用的函数中,这种方法的效率就非常低;
- (3)使用构造函数Function创建的函数不使用词法作用域,相反的,它们总是被当做顶级函数来编译.
原文:函数直接量创建的是匿名函数,但是语法规定它可以指定函数名,这在编写调用自身的递归函数时非常有用;
var f = function fact(x){if (x < 2) {return 1} else {return x*fact(x-1)}}
备注:等同于 var f = function(x){if (x < 2) {return 1} else {return x*arguments.callee(x-1)}};