javaScript 函数

今天在看《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关键字,则是全局

原文地址:https://www.cnblogs.com/gcm688/p/5211234.html