您的位置:首页 > Web前端 > JavaScript

javascript忍者秘籍-第三章笔记(函数的基础)

2018-01-19 10:21 567 查看
javascript忍着秘籍笔记

函数调用传递的两个隐式参数argument,this

隐式:意味着这些参数不会显示列在函数签名里,但是它们默默地传递给函数并存在函数作用域内。

在函数内部他们可以像卡显示命名参数一样使用

如果在你浏览器中调试时,你就会发生他们是真实存在对象中的

arguments参数

他只是一个类数组,只是拥有部分特性,你能数组形式去获取(arguments[0]得到第一个参数),也能for循环遍历,但他就不是数组

this参数

this称为调用者的上下文

而函数调用几种方式呢?

作为一个函数进行调用,是最简单的形式。

作为一个方法进行调用,在对象上进行调用,支持面向对象编程。

作为构造器进行调用,创建一个新对象。

通过apply()或call()方法进行调用,这种方式很复杂,遇到的时候我们将会再讨论

作为一个函数进行调用,是最简单的形式。

一般情况下,也是这种用法

如:

function ninja(){};
ninja();


而他们的this,也就是window

作为一个方法进行调用

而还有一种就是作为函数中的方法被调用,这个时候this是函数

如:

var creep=function ninja(){};

var sneak={
skulk:creep
}

sneak.skulk();//skulk的this就是sneak对象


作为构造器进行调用

构造器被调用的时,就会发生下面行为:

创建一个新的空对象

传递给构造器的对象是this参数,从而成为构造器的函数上下文

如果没有显示的返回值,新创建的对象则作为构造器进行返回

作为构造器进行调用,this就是该对象

function Ninja(){
this.skulk=function(){
return this;
}
}

var ninja1=new Ninja();

assert(ninja1.skulk()===ninja1);//通过


使用apply()和call()方法进行调用

在函数调用的时候,javascript为我们提供了一种方式,可以显示指定任何一个对象作为其函数上下文,javascript的每个函数都有apply()和call()方法

apply()传入两个参数:

函数上下文的对象

作为函数参数所组成的数组

Call()方法使用方法类似,唯一不同的是给函数传入的参数是一个参数而不是列表,而不是单个数组

例子:

function juggle(){
var result=0;
for(var n=0;n<arguments.length;n++){
result+=argument
;
}
this.result=result;
}

var ninja1={};
var ninja2={};

juggle.apply(ninja1,[1,2,3,4]);
juggle.call(ninja2,1,2,3,4);

assert(ninja1.result===10);//通过

assert(ninja2.result===26);//通过


从最后的测试可以看出:结论是正确的

ninja1和ninja2把上下文给传进去了

而juggle方法也成功在上下文添加了一个result

当然最后的计算结果也是一样的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: