今天在看《javaScript学习指南》函数章节,设计知识点大概归纳如下:
1.创建函数方法:
a: 声明式(静态式),即使用function关键字,接着是函数体
1 function sayHi(toWhom){ 2 alert("Hi"+toWhom); 3 } 4 alert(sayHi("Hello world!"));
调用该函数将弹出一个对话框,显示"Hi Hello world!"
b:匿名函数:通过函数构造器创建一个新的函数, 其函数体将作为参数传给这个函数构造器, 函数本身不需要声明。
var sayHi = new Function("toWhom", "alert('Hi' + toWhom);") sayHi("Hello World!");
当JavaScript解析它时会动态创建一个匿名函数,调用之后,函数会被自动删除。(当在一个循环中调用时,意味着每循环一次就创建一次,不过对于定义一个在运行时才确定需求的函数是一个好方法)
var func = new Function("x", "y", "return x*y") #等价于 function func(x, y){ return x*y; }
c:函数字面量(函数表达式),和匿名函数有些类似都没有定义函数名称,区别在于该方式只会被解析一次。和声明式相比只是将函数赋给一个变量
var func = function(x, y){ return x*y; } alert(func(3, 4));
当想实现一个函数作为一个函数的参数时该方式就比较方便。
function functionObject(x, y , z){ alert(z(x, y)); } functionObject(3, 4, function(x, xy){return x* y;})
2.函数返回值和参数
参数的变量传给函数的实际上是原始值, 如一个字符串, 一个布尔值, 一个数字等,如果在函数中修改实际参数值,是不会影响调用程序的。但对于传给函数的对象而言传递的则是一个引用,在函数中对这个对象的修改会反映到调用程序中。
function alterArgs(strLiteral, aryObject){ strLiteral = "Override"; aryObject[1] = "2"; } var str = "original"; var ary = new Array("one", "two"); alterArgs(str, ary); ######### original one 2
3 回调函数, 函数以类似filter, forEach, every, map, some以及用函数字面量形式使用。
4 函数作用域:
a.在一个函数中定义变量使用var关键字,则该变量作用域为局部,只在函数体中使用,函数体外则是未定义
b.在函数体外变量未使用var关键字,则是全局