首页 > 编程语言 > 详细

JavaScript之Function类型

时间:2015-11-08 16:30:11      阅读:268      评论:0      收藏:0      [点我收藏+]

一.如何创建函数

    三种方式:

    //1.函数声明
    function sum(num1,num2){
        return num1+num2;
    }
    //2.函数表达式
    var sum = function(num1,num2){
        return num1+num2;
    }
    //3.使用new关键字,创建Function类型的实例
    var sum = new Function("num1","num2","return num1+num2;");

    console.log(sum(1,2));//3

 

二.理解“函数是对象,函数名是指向该对象的指针!”

    //1.深入理解:函数是对象,函数名是指向该对象的指针!js里面对象都是引用类型(类似指针,都是指向一个内存)
    function sum(num1, num2) {
        return num1 + num2;
    }

    var anotherSum = sum;//绑定function(num1,num2){}函数对象
    sum = null;//解除sum同function(num1,num2){}函数对象的绑定
    console.log(anotherSum(1, 2));//3

    //2.JS中函数名为绑定函数的引用,一个引用只能绑定一个函数对象,所以JS中函数没有重载!
    function echo() {
        return 4;
    }

    function echo(num) {
        return num;
    }

    console.log(echo());//undefined,echo绑定function(num){return num;}函数对象了

    //3.函数声明提升
    console.log(abc());//abc
    function abc() {
        return "abc";
    }

 

三.函数内置对象

每个函数内部都有两个内置的对象(并非属性!):arguments和this

arguments.callee为指向该函数对象的指针

this:链接 http://www.cnblogs.com/ZHeGeS/p/4715570.html

 

四.函数固有的属性和方法

1: caller属性

caller(保存调用当前函数的函数的引用),即调用者的引用。如果在全局作用域中调用当前函数,它的值为null

2: prototype属性

链接:http://www.cnblogs.com/ZHeGeS/p/4870332.html

3:call和apply方法

每个函数都包含两个非继承而来的方法:apply和call(在特定作用域中调用函数,等同于设置函数体内this对象的值)

用法:

call(thisObj,var1,var2,var3)

apply(thisObj,[var1,var2,var3]/arguments)

区别(体现在参数):

call要逐个填入参数、apply不仅可以直接传入参数数组而且可以把当前函数的arguments对象传入!

call/apply真正强大的地方在于:扩充函数赖以运行的作用域的同时,不需要与方法有任何耦合关系!

 

例1.通过耦合的方式扩充作用域:

var name = "ZheG"
function echoName(){
    alert(this.name);
}
var echo = {
    name:"sansan",
    echoName:echoName
}

echoName();//"ZheG"
echo.echoName();//"sansan"

例2.采用apply/call通过解耦的方式扩充作用域:

var name = "ZheG"
function echoName(){
    alert(this.name);
}

var echo = {
    name:"sansan"
}

echoName();//"ZheG"
echoName.call(echo);//"sansan"
alert(echo.echoName);//undefined,可知echoName和对象echo没有任何关系了!

例3.

    $(".login-button:first").click(function(){

        $(this).attr("buttonName","loginBtn");
        echoBtnName();//由于当时作用域中的this为windows,所以打印undefined
        echoBtnName.call(this);//扩展echoBtnName作用域,使得this为当前点击Dom对象,打印“loginBtn”
    });

    function echoBtnName(){
       //alert(this.buttonName);this只能获得原生的Dom属性,无法获得自定义的属性!
        //alert(this.tagName);//获得标签名称
        alert($(this).attr("buttonName"));//alert($(this).attr("buttonname"));也可以
    }

JavaScript之Function类型

原文:http://www.cnblogs.com/ZHeGeS/p/4865336.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!