百木园-与人分享,
就是让自己快乐。

JS学习——函数

学习内容来源:JavaScript 函数参数、JavaScript 函数调用、JavaScript 闭包

JavaScript 函数参数

注意:JavaScript 函数不会对参数值进行任何检查。

函数参数

  • 函数参数(parameter)指的是在函数定义中列出的名称。
  • 函数参数(argument)指的是传递到函数或由函数接收到的真实值。

参数规则

  • JavaScript 函数定义不会为参数(parameter)规定数据类型。
  • JavaScript 函数不会对所传递的参数(argument)实行类型检查。
  • JavaScript 函数不会检查所接收参数(argument)的数量。

参数默认

如果调用参数时省略了参数(少于被声明的数量),则丢失的值被设置为:undefined。

注意:有时这是可以接受的,但是有时最好给参数指定默认值。

arguments 对象

如果函数调用的参数太多(超过声明),则可以使用 arguments 对象来达到这些参数。
arguments 对象包含函数调用时使用的参数数组。

例子:

// 计算所有数的和,x = 871
x = sumAll(1, 123, 500, 115, 44, 88);

function sumAll() {
    var i, sum = 0;
    for (i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}

参数通过值传递

函数调用中的参数(parameter)是函数的参数(argument)。

JavaScript 参数通过值传递:函数只知道值,而不是参数的位置。如果函数改变了参数的值,它不会改变参数的原始值。

注意:参数的改变在函数之外是不可见的。

对象是由引用传递的

在 JavaScript 中,对象引用是值。

正因如此,对象的行为就像它们通过引用来传递。如果函数改变了对象属性,它也改变了原始值。

注意:对象属性的改变在函数之外是可见的。

JavaScript 函数调用

以函数形式调用函数

这种函数不属于任何对象。但是在 JavaScript 中,始终存在一种默认的全局对象。
在 HTML 中,默认全局对象是 HTML 页面本身,所有上面的函数“属于”HTML 页面。
在浏览器中,这个页面对象就是浏览器窗口。上面的函数自动成为一个窗口函数。

function myFunction(a, b) {
    return a * b;
}
myFunction(10, 2);    // 将返回 20

// myFunction() 和 window.myFunction() 是同一个函数:
function myFunction(a, b) {
    return a * b;
}
window.myFunction(10, 2);    // 也会返回 20

作为方法来调用函数

fullName 方法是一个函数。该函数属于对象。myObject 是函数的拥有者。
被称为 this 的事物,是“拥有”这段 JavaScript 代码的对象。在此例中,this 的值是 myObject。

var myObject = {
    firstName:\"Bill\",
    lastName: \"Gates\",
    fullName: function () {
        return this.firstName + \" \" + this.lastName;
    }
}
myObject.fullName();      // 将返回 \"Bill Gates\"

通过函数构造器来调用函数

构造器调用会创建新对象。新对象会从其构造器继承属性和方法。
构造器内的 this 关键词没有值。
this 的值会成为调用函数时创建的新对象。

// 这是函数构造器:
function myFunction(arg1, arg2) {
    this.firstName = arg1;
    this.lastName  = arg2;
}

// 创建了一个新对象:
var x = new myFunction(\"Bill\", \"Gates\");
x.firstName;           // 会返回 \"Bill\"

JavaScript 闭包

JavaScript 变量属于本地或全局作用域。
全局变量能够通过闭包实现局部(私有)。

JavaScript 嵌套函数

所有函数都有权访问全局作用域。
事实上,在 JavaScript 中,所有函数都有权访问它们“上面”的作用域。
JavaScript 支持嵌套函数。嵌套函数可以访问其上的作用域。
闭包指的是有权访问父作用域的函数,即使在父函数关闭之后。

例子:

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();     
    return counter; 
}

如果我们能够从外面访问 plus() 函数。
我们还需要找到只执行一次 counter = 0 的方法。
我们需要闭包(closure)。

// counter = 3
var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

变量 add 的赋值是自调用函数的返回值。
这个自调用函数只运行一次。它设置计数器为零(0),并返回函数表达式。
这样 add 成为了函数。最“精彩的”部分是它能够访问父作用域中的计数器。
这被称为 JavaScript 闭包。它使函数拥有“私有”变量成为可能。
计数器被这个匿名函数的作用域保护,并且只能使用 add 函数来修改。


来源:JavaScript 函数参数JavaScript 函数调用JavaScript 闭包
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » JS学习——函数

相关推荐

  • 暂无文章