JS学习(9)----JS Functions

JS Functions

1.关于函数的定义

(1)如果只是声明了函数,在没有调用之前,函数不会执行。

函数的声明,如下:

function myFunction(p1, p2) {
    ......
}

注:参数不需要写明类型,这一点与C++不同。

(2)函数表达式

函数也可以作为表达式
如下:

var x = function(a,b) {return a+b}; // a+b后面的分号可要可不要,但是括号外边的分号是必需的。

上面表达式中的函数成为无名函数,anonymous function
存储在变量中的函数通常不需要名字,它们常常通过变量名来调用。
上面的表达式之后可以将x当成函数名使用:

var result = x(2,3);
document.getElementById("test").innerHTML = result;

(3)函数提前(hoisting)

在js中,不仅仅是变量提前,函数也提前。即在js中只有函数级变量,没有块级变量。
这一点与c++有所不同。即在函数中,变量和函数的声明总会被提到最前面,所以在写代码的时候尽管在函数声明之前调用函数也能够正常地执行。

// 在函数声明之前调用函数
document.getElementById("test").innerHTML = myFunction(3,2); 
function myFunction(a,b) {
    return a*b;
}

实际上浏览器是这样处理的:

function myFunction(a,b) {
    return a*b;
}
document.getElementById("test").innerHTML = myFunction(3,2); 

(4)self-invoking函数(自调用)

(function() {
    alert("Hello!");
})();

2.函数的参数

(1)不限制传入的参数的数目

function findMax() {
    var l = arguments.length;
    var max = -Infinity;
    for (var i = 0; i < l; ++i) {
        if (arguments[i] > max) {
            max = arguments[i];
        }
    }
    return max;
}
document.getElementById("test").innerHTML = findMax(1,4,3,12,5,28); // 传入的参数的数目不定

注:js中的函数只知道参数的值是多少,不知道参数的实际内存位置,所以如果参数的值发生了改变,函数并不知道。

3.Function Invocation

(1)直接函数名调用

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

(3)作为对象的方法进行调用

var person = {
    firstName:"John",
    lastName: "Doe",
    fullName: function () {
        return this.firstName + " " + this.lastName;
    }
}
person.fullName();  // fullName是对象的方法

(3)通过函数构造

function myFunction(arg1, arg2) {
    this.firstName = arg1;
    this.lastName  = arg2;
}
var x = new myFunction("John", "Smith");
x.firstName;

4.Function Call

var person = {
    firstName:"John",
    lastName: "Doe",
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
}
var myObject = {
    firstName:"Mary",
    lastName: "Doe",
}
person.fullName.call(myObject);

在myObject对象上使用person的fullName方法。
另外有一个apply方法与call非常相近

Math.max.apply(null,[1,2,3]);

5.函数闭包(closure)

<button type="button" onclick="myFunction()">Count!</button>
var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

function myFunction(){
    document.getElementById("demo").innerHTML = add();
}

每次点击button,counter的值会加1
下面是相关的解释:
这里写图片描述
注:函数闭包的内容比较难,需要认真理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值