码迷,mamicode.com
首页 > Web开发 > 详细

函数调用---JS权威指南

时间:2015-12-21 23:33:23      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

四种调用方式:

  • 作为函数
  • 作为方法
  • 作为构造函数 (待续)
  • 通过它们的call()和apply()方法调用 (待续)

函数调用:就是将函数作为普通的函数进行调用。

根据ES3和非严格的ES5的规定,函数调用的上下文(this)是全局对象。在严格模式下,调用上下文是undefined。后面的代码中会看到。

this 也可以用来判断是否是严格模式,

var strict = (function(){return !this;}());

方法调用(今晚重点):

方法简单的说就是对象的一个属性,只不过这个属性是一个函数。比如在下面的代码中:定义了一个对象,m是o的一个属性,即为方法。调用:o.m();

方法调用和函数调用的主要区别:调用上下文。

方法链:方法返回值是一个对象,而这个对象还可以再调用它的其他方法,这样的调用序列称为方法链。比如用jQuery这样写:

 

$(":header").map(function() { return this.id}).get().sort();

 

先获取所有的header,得到一个对象,再给该对象执行map(映射)(一个函数)获取它们的id,再将这些id转换为数组,并进行排序。

 

下面这段代码涉及到作用域,以及this。

this 没有作用域的限制,嵌套函数不会从调用它的函数中继承this,就是说,在下面的代码里,第八行的this是在一个嵌套函数里,这个嵌套函数被作为函数调用。因此根据前面说的规定,函数调用的this是全局对象或者undefined。

为了嵌套函数能够访问外部函数的this值,需要将其保存在一个变量里,该变量和这个内部函数在同一作用域,第三行和第五行,通常用self来保存this。

 

 1 var o = {                                    //定义一个对象o
 2         m: function(){                       //对象o的方法m()
 3             var self = this;                 //将m()方法的this值保存在变量self里
 4             console.log(this === o);         //true,this 就是对象o
 5             f();                             //调用函数f()
 6 
 7             function f(){                    //定义一个嵌套函数
 8                 console.log(this === o);     // false this为全局对象或者undefined
 9                 console.log(self === o);     //true  
10             } 
11        }
12     };
13     o.m()                                    //调用对象o的方法m()

笔试的时候好像遇到过这样的题。

对于英语专业的我来说,有时候理解一些概念还真需要一些时间,或者需要看一些概念的具体应用例子才能理解,但我又偏执于对概念的理解。

形参(parameter):相当于函数定义时的变量。(作为形参传入的参数a,b(以下面的例子为例)相当于 var a, b),也就是将其作为形参传入时,已经为其定义好了,即已经声明了。

实参(argument):在运行时的函数调用时传入的参数。

看例子吧:

function f(a,b){......}            //定于函数时的参数
f(c,d);                            //调用函数时传入的参数,与a,b相对应

2015-12-21 23:02:26 HAVE A SWEET DREAM.

函数调用---JS权威指南

标签:

原文地址:http://www.cnblogs.com/liurenxingyu/p/5065216.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!