JavaScript中call和apply方法的区别实例分析

本文实例分析了JavaScript中call和apply方法的区别。分享给大家供大家参考,具体如下:

这两个方法不经常用,但是在某些特殊场合中是非常有用的,下面主要说下它们的区别:

1、首先,JavaScript是一门面向对象的语言,也就是说它有this的概念。而且JavaScript是一门动态类型语言,为什么说它是动态类型语言呢?因为JavaScript在编译时没有类型检查的过程,不会去检查创建的对象类型,也不会去检查传递的参数类型,所以它的变量类型在运行期间是可以改变的。

2、要知道callapply都是为了改变某个函数运行时的上下文(context)而存在的,也就是为了改变函数,也可以说是对象(函数本身就是对象)内部this的指向而存在的。

3、二者区别为:传参数的方式不一样,如下:

rush:js;"> func.call(this,arg1,arg2); func.apply(this,[arg1,arg2]);

上面也很清楚了,call传参数时,明确知道时几个参数或者参数较少时,比如

apply第二个参数必须为一个数组,即将参数放进数组中即可。

4、实例

rush:js;"> (function(){ Array.prototype.push.call(arguments,4);//arguments借用Array.prototype.push方法 console.log( arguments ); //输出: [1,2,3,4] })(1,3); var currying = function(fn){ var args = []; return function(){ if( arguments.length === 0){ return fn.apply( this,args); } else{ [].push.apply( args,arguments); return arguments.callee; //callee已弃用 } } }; var cost = (function(){ var money = 0; return function(0{ for(var i = 0,l - arguments.length;i

调用

rush:js;"> var cost_ = currying(cost); //将cost转化成curring函数 cost_(1); cost_(2); alert(cost_()); //输出:3

解释:通过currying(柯里化)的转化,在cost_中传入参数时,未能得到值,而是将值存储起来,直到当无参数传入时,输出结果。

更多关于JavaScript相关内容可查看本站专题:《》、《》、《》、《》及《用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...