微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JS学习——函数

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

JavaScript 函数参数

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

函数参数

参数规则

  • 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 函数修改

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐