js方法的声明与调用

具名函数直接调用

function foo()   {   }  
foo();

 

(2)匿名函数通过引用来调用

fooRef = function()   {   }
fooRef();

 

(3)没有引用的匿名函数调用1

(function()  { }());

 

(4)没有引用的匿名函数调用2

 (function()  {  })();  

 

 (5)没有引用的匿名函数调用3  

 void function()  {
 }();

 

图1.1,图1.2表明了这两种表达式的运算过程是不一样的,图1.1中是用强制运算符使函数调用运算得以执行,图1.2中则用强制运算符运算"函数直接量声明"这个表达式,并返回一个函数自身的引用,然后通过函数调用运算"()"来操作这个函数引用。而上面的最后一个匿名函数调用void function(){}();则用于调用函数并忽略返回值,运算符void用于使其后面的函数表达式执行运算。如果我们不使用"void"与强制运算"()",代码能否执行:

(1)function(){}()  //使用''()"强制调用

(2)function(){}();  //使用";"来执行语句

脚本引擎会认为function(){}是函数声明,从而通不过语法检测,代码被解析成这样:

function(){};();

function(){}被作为声明被解释,而"();"被独立成一行来解释,因而会报语法错误,为什么知道是"();"导致的错误?我们改成如下代码:

function(){}(1);

这样就会被引擎解释为:

fucntion(){};

(1);  //单值表达式

因而通过了语法检测.

  • 方法调用模式
  • 函数调用模式
  • 构造器调用模式
  • apply调用模式

下面我们来看看一些实例更好理解。

1:方法调用模式。

请注意this此时指向myobject。

/*方法调用模式*/    

var myobject={         

    value:0,            

inc:function(){         

            alert(this.value)       

          }        

}    

myobject.inc()

 

2:函数调用模式

请注意this此时指向window

/*函数调用模式*/     

    var add=function(a,b){

        alert(this)//this被绑顶到window

            return a+b;        

}     var sum=add(3,4);   

  alert(sum)

 

3:构造器调用模式

javascript语言精粹一书建议摒弃这中方式。因为有更好的方式。这里先不介绍。下次发表博文的时候贴出来。

会在这里加一个连接。

/*构造器调用模式  摒弃*/     

    var quo=function(string){     

        this.status=string;        

}    

quo.prototype.get_status=function(){       

      return this.status;      

   }    

var qq=new quo("aaa");    

alert(qq.get_status());

转载于:https://www.cnblogs.com/wangqw-cn/p/4584660.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值