JS函数

  函数声明:javascript定义函数(声明函数)可以有2种方法:正常方法构造函数。其中正常方法中又分为两种巨不同的定义方法;

    正常方法:1、函数声明(全局的)   :function  sayA() {   alert("i am A");  }     

         2、函数表达式(局部的): var sayB = function() { alert("i am B"); } 

   区别:前者会在代码执行之前提前加载到作用域中,后者则是在代码执行到那一行的时候才会有定义,这可以使用全局的概念理解,因为前者是全局,在没有调用前已经被加载;Javascript 中函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。

 第一种函数声明的方法默认是全局的.我们都知道全局成员不是编程的最佳实践,在没有通过明确所有者对象而直接调用的函数中,如sayA() ,将导致this的值成为默认对象(浏览器中的窗口)。

 实例:使用函数声明的方法定义一个函数:makeArry,

<script type="text/javascript">
function makeArray(arg1, arg2){
    return [ this, arg1, arg2 ];
}
</script>

然后简单的调用makeArray('one''two');返回值:[ window, 'one', 'two' ];

然后我们变相的修改下函数的声明:让我们现在创建一个简单的对象,使用 makeArray函数作为它的一个方法,我们将使用json的方式来声明一个对象,我们也来调用这个方法:

var arrayMaker = {
    someProperty: 'some value here',
    make: makeArray
};
 
//调用
arrayMaker.make('one', 'two');
// 输出=> [ arrayMaker, 'one', 'two' ]
//调用
arrayMaker['make']('one', 'two');
// 输出=> [ arrayMaker, 'one', 'two' ]

 看到这里的不同了吧,返回值:[ arrayMaker, 'one', 'two' ];this的值变成了对象本身.你可能会疑问原始的函数定义并没有改变,为何它不是window了呢.好吧,这就是函数在JSavacript中传递的方式,函数在JavaScript里是一个标准的数据类型,确切的说是一个对象.你可以传递它们或者复制他们.就好像整个函数连带参数列表和函数体都被复制,且被分配给了 arrayMaker里的属性make,那就好像这样定义一个 arrayMaker:

var arrayMaker = {
    someProperty: 'some value here',
    make: function (arg1, arg2) {
        return [ this, arg1, arg2 ];
    }
};

   构造函数:  var add = new Function('a','b','return a+b;');这种方法作为我来说不常用,本人也没有这么多精力深入研究JS。

 JS的函数声明搞定了,接下来看看JS的调用:来源:leejersey

    1、方法调用模式

/*方法调用模式*/
var myobject={
    value:0,
    inc:function(){
    alert(this.value)
        }
 }
    
myobject.inc()

//请注意this此时指向myobject。

  2、函数调用模式

/*函数调用模式*/
var add=function(a,b){
        alert(this)//this被绑顶到window
        return a+b;
        }
var sum=add(3,4);
alert(sum)

//请注意this此时指向window

 3、构造器调用模式

/*构造器调用模式  摒弃*/
 var quo=function(string){
   this.status=string;
        }
 quo.prototype.get_status=function(){
   return this.status;
        }
 var qq=new quo("aaa");
 alert(qq.get_status());

 4、 apply调用模式 原文没看懂就搜素了另一篇介绍apply的内容。这里也不是我研究的重点,忽略!

 

posted @ 2016-12-09 21:48  ABO-阿博  阅读(270)  评论(0编辑  收藏  举报