Function对象属性和方法

/*
var pattern = /^[\w]+\.(zip|rar|gz)$/;            //|选择符必须用分组符号包含起来
var str = '123.7z'; 
alert(pattern.test(str));

function box(num1, num2) {                //普通函数的声明方式
    return num1 + num2;
}

alert(box(1, 2));

var box = function(num1, num2) {    //使用变量初始化函数
    return num1 + num2;
};

alert(box(1,2));

var box = new Function('num1', 'num2', 'return num1 + num2');            //使用new的构造函数来声明函数
alert(box(1, 2));
alert(typeof box);

//函数可以传递函数,

//下面的例子很普通,不是作为函数来传递的,而是作为函数的返回值来传递的

function box(sum, num) {
    return sum + num;
}

function sum(num) {
    return num + 10;
}

var result = box(sum(10), 10);        //20,10sum(10)这里传递的是函数的返回值,和普通的变量一样,没区别
alert(result);

*/

//要把函数本身作为参数传递,而不是函数的结果


function box(sum, num) {
    return sum(num);
}

function sum(num) {
    return num + 10;
}

var result = box(sum, 10);                //这里sum是一个函数,当作参数传递到另外一个函数里,而不是函数的返回值
alert(result);
/*
function sum(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * sum(num-1);                //4 * 3 * 2 * 1 = 24 阶乘,递归
    }
}


alert(sum(4));


function box(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num-1);                //使用arguments.callee,调用自身,实现递归
    }
}


alert(box(4));


//window是一个对象,而且是JS里面最大的对象,是最外围的对象


//alert(typeof window);        window是对象,类型是对象,window表示全局

alert(this);            //[object Window] this目前表示的是window,因为在window的范围下
alert(typeof this);    //和window一模一样,所以this就是window

var color = '红色的';            //这里color就是全局变量,而这个变量又是window的属性
//alert(window.color);            //这里已经很好的说明color是window下的属性
alert(this.color);                //同上

window.color = '红色的';        //相当于 var color = '红色的';???,是一样的


var box = {
    color : '蓝色的',                //这里的color是box下的属性,也就是局部变量
    sayColor : function() {
        alert(this.color);            //这里this,我们确定了是代表的box对象。
    }
};

alert(this.color);
box.sayColor();

window.color = '红色的';

function sayColor() {
    alert(this.color);            //所以这里执行的时候是动态的,第一次在window下,第二次在box下
}

sayColor();                        //这里调用sayColor,其实范围还是在window下

var box = {
    color : '蓝色的'
};


box.sayColor = sayColor;    //这段代码相当于47行

box.sayColor();                //这里执行的是box里面的this.color

function box(name, age) {
    return name + age;
}

alert(box.length);


function box(num1, num2) {
    return num1 + num2;
}


function sum(num1, num2) {                        //apply和call可以冒充另外一个函数
    return box.apply(this, [num1, num2]);        //this表示window作用域,[]表示传递的参数
}

function sum2(num1, num2) {
    return box.apply(this, arguments);            //这个可以当数组传递,arguments
}

//alert(box(10,10));

//alert(sum(10,10));
alert(sum2(10,10));


function box(num1, num2) {
    return num1 + num2;
}

function sum(num1, num2) {
    return box.call(this, num1, num2);        //call只是传递参数不同,其他和apply一样
}


alert(sum(10,10));
*/


var color = '红色的';                //全局

var box = {
    color : '蓝色的'                    //局部
};

function sayColor() {
    alert(this.color);                
}

//sayColor();                            //全局

//用call是实现对象冒充,冒充box下,冒充window下
//sayColor.call(window);            //冒充window 红色的
//sayColor.call(this);                    //this就是window
sayColor.call(box);                    //冒充box,作用域就在box对象里面,所以color就是蓝色的

 

posted @ 2015-03-15 13:44  laugh  阅读(311)  评论(0编辑  收藏  举报