part2 JavaScript函数

函数

定义一个函数

  • 定义方式一

绝对值函数

function abs(x){
    if(x>=0){
        return x;
    }else{
        return -x;//return 代表函数结束
    }
}
  • 定义方式二
var abs = function(x){
    if(x>=0){
        return x;
    }else{
        return -x;//return 代表函数结束
    }
}

function(x)是一个匿名函数,但是可以把结果赋值给abs,tongguoabs调用函数

调用函数

abs(10)   //10
abs(-10)  //10

参数问题:javascript可以传任意个函数,也可以不传参

var abs = function(x){
    //手动抛出异常
    if(typeof x!='number'){
        throw 'not a number'
    }
    if(x>=0){
        return x;
    }else{
        return -x;//return 代表函数结束
    }
}
  • arguments(数组)

    是js免费赠送的关键字,可以很方便的找到最大的一个参数的值:

    x = findMax(1, 123, 500, 115, 44, 88);
     
    function findMax() {
        var i, max = arguments[0];
        
        if(arguments.length < 2) return max;
     
        for (i = 0; i < arguments.length; i++) {
            if (arguments[i] > max) {
                max = arguments[i];
            }
        }
        return max;
    }
    

变量的作用域

在javascrpit中,var定义变量实际是有作用域的,

假设在函数体中声明,则在函数体外不可以使用(闭包)

function ar(){
    var x = 1;
    x=x+1;
}
x = x + 2;//报错

如果两个函数使用了相同的函数名,只要不在一个函数体内就可用

方法

定义方法

方法就是把函数放在对象里面,只有:属性+方法

var ar = {
    name:'ar';
    birth: 2000;
    age:function(){
        var now = new Date().getFullYear();
        return now-this.birth;
    }
}
//属性
ar.name
//方法,必须要带括号
ar.age()

this代表,无指向性的,默认只想调用它的那个对象

 function getAge(){
        var now = new Date().getFullYear();
        return now-this.birth;
    }
var ar = {
    name:'ar';
    birth: 2000;
    age:getAge
}
//ar.age()     ke
//getAge()     NaN window

call()apply() 是预定义的函数方法。 两个方法可用于调用函数,两个方法的第一个参数必须是对象本身。

function myFunction(a, b) {
    return a * b;
}
myObject = myFunction.call(myObject, 10, 2);     // 返回 20
function myFunction(a, b) {
    return a * b;
}
myArray = [10, 2];
myObject = myFunction.apply(myObject, myArray);  // 返回 20
  • apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。

  • 在 JavaScript 严格模式(strict mode)下, 在调用函数时第一个参数会成为 this 的值, 即使该参数不是一个对象。

  • 在 JavaScript 非严格模式(non-strict mode)下, 如果第一个参数的值是 null 或 undefined, 它将使用全局对象替代。

箭头函数(没看懂)

ES6新增,好像是一个可以简便的函数

闭包

JavaScript 变量可以是局部变量或全局变量。

私有变量可以用到闭包。

function myFunction() {
    var a = 4;
    return a * a;
}//函数可以访问有函数内部定义的变量
var a = 4;
function myFunction() {
    return a * a;
}//访问外部定义的变量

var a = 4; function myFunction() { return a * a; }

JavaScript 内嵌函数

所有函数都能访问全局变量。

在 JavaScript 中,所有函数都能访问它们上一层的作用域。

JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。

该实例中,内嵌函数 plus() 可以访问父函数的 counter 变量:

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();    
    return counter; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值