首页 > 代码库 > JavaScript笔记之Function

JavaScript笔记之Function

一、函数定义

(1)使用function declaration

格式:function functionName(parameters) {

         function body

        }

注:此种方式声明的函数作用域是全局的,即在声明之前可以调用

(2)使用function expression

格式:var name = function (parameters) { function body };

注:与(1)不同,在声明之前不可以调用

(3)使用function constructor()

格式:var myFunction = new Function("a", "b", "return a * b");

注:不推荐使用,大多数情况下,在js中应该避免使用new关键字

二、Self-Invoking函数

使用(2)方式声明的函数可以被定义成“self-invoking”,self-invoking expression可以不必调用自动执行。

self-invoking函数条件:

(1)函数被”()“包括

(2)function expression is followed by ();

例:(function () {

          var x = "Hello";              // I will invoke myself

      })();

三、Function Object

在JS中,函数也是object,有自己的property和method,如arguments.length返回函数接收到的参数的个数;toString()方法返回函数的字符串形式。

四、参数

JS不会对接收到的参数做任何检查,包括参数个数、类型等等。

如果函数接收到的参数个数小于声明时的个数:未传递的参数被当做undefined

基本类型:值传递

object类型:传递的是引用

五、函数调用

使用call() 和 apply()两个函数来调用函数,必须有owner object作为第一个参数。

不同之处:

(1)使用call():参数一个个接收

function myFunction(a, b) { return a * b; }

myFunction.call(myObject, 10, 2);

(2)使用apply(): 使用数组接收

function myFunction(a, b) { return a * b; }

var myArr = [10, 2];

myFunction.call(myObject, myArr);

六、Closure

使用closure可以实现函数private变量。

Nested Function:定义在函数内部,可以访问其父函数内定义的局部变量。

closure实现例子:

var add = (function () {

    var counter = 0;

    return function () { return counter += 1; }

})();

add();    // 1

add();    // 2

add();    // 3

w3schools.com上对此解释:

A closure is a function having access to the parent scope, even after the parent function has closed.