//js杂谈 //主要想到什么就写下来 //测试的版本还是chrome 多少忘了 //第一个arguments //第一个作用 var toString={}.toString; var slice=[].slice; function aa(){ console.info(arguments.callee);//返回的是这函数aa引用 //下面两个证明他是非常像数组 console.info(arguments); console.info(arguments.length); //为什么不是数组呢 console.info(toString.call(arguments));//[object Arguments] 到此如何 //转化为数组//突然想到为什么能转化数组- -,写着写着就想到了这个 console.info(slice.call(arguments)); console.info(toString.call(slice.call(arguments)));//[object Array] } aa(); //有什么用呢,递归有用 //1-n的乘法 function bb(n){ if(n==1){ return 1; } return n*arguments.callee(n-1); } console.info(bb(5));// 是不是特别像数组 但不是真正的数组 //还有strict mode ,会被禁用,不过严格模式在火狐下会有bug //第二个 看过我以前写的博客的朋友,都应听到类数组这个东东 //像数组的对象 aa("a","b","c","d"); //好吧我们将其变为真的数组 //我记得在数组总结中有这样的方法slice //当然根据arguments可实现像java这样的重载功能 //就是根据arguments参数长度,和其值执行不同的操作 //不地感觉怎么就是感觉不妥 = = //第二个就是call 与apply //二者有一个不同,就是第一个要一个一个的传参,第二个可以传个arguments //传参不是这两个函数的真面目 //可以随时函数执行的上下文环境 是不是很厉害 var x="window"; var obj1={ x:"xx", xxxx:window.alert, xx:function(){ alert(this.x); }, xxx:function(){ //alert(this);//object alert(x); } }; var obj2={ x:"xx2", xx:function(){ alert(this.x); }, xxx2:function(){ alert(x); } }; //看变化 obj1.xx(); obj1.xx.call(this); obj1.xx.call(obj2); //再来三个,有什么差别 //obj1.xxx(); //obj1.xxx.call(this); //obj1.xxx.call(obj2); //弹出来都是window //alert方法在window,所以这个上下文 //上下文环境由调用时决定 //感觉也可以离解为一个方法里又包了一个alert函数,由闭包的意思,所以上下文为window //若有错误请指出 var a=window.alert; console.info(a); //a.call(obj1,x);//我想是js原生的一些方法不允许修改,想证明就是不行呢 //到此结束
相关推荐
### 理解JavaScript中的`caller`...综上所述,理解`caller`、`callee`、`call`、`apply`以及`arguments`对象在JavaScript编程中至关重要,它们不仅增强了函数的灵活性和复用性,还提供了深入分析和调试代码的强大工具。
JavaScript中的call、apply和bind方法都是用来改变函数调用时的上下文(即this值)以及传递参数。它们之间的相同点在于,都能够指定函数执行时的this对象,并且都能接收参数。不同点在于它们的调用方式和执行时机。 ...
1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用...
与 call() 相似,`thisObj` 是函数内 this 指向的对象,`argArray` 是一个数组或者是一个类数组对象,比如 arguments 对象,代表了传给函数的参数列表。 继续上面的例子: ```javascript function callSum(num1, ...
`apply`与`call`相似,只是传递参数的方式不同: ```javascript sayHello.apply(obj, ['World']); // 输出 "Hello, World" ``` 在这两个示例中,`obj`作为`sayHello`函数的上下文,使得`this.name`能够正确地引用`...
JavaScript中的`callee`、`call`和`apply`都是与函数有关的重要概念,它们提供了不同的方式来处理函数调用和上下文。以下是这三个特性的详细解释: **arguments.callee** `arguments.callee`是一个在函数内部可以...
总结来说,`apply`和`arguments`在JavaScript中提供了灵活的方法复用机制,允许我们改变函数的执行环境并处理动态参数。通过`apply`,我们可以将函数绑定到特定的对象上,同时传递任意数量的参数。`arguments`对象则...
总结来说,`call`和`apply`在JavaScript编程中扮演了关键角色,它们提供了改变函数执行上下文的能力,从而支持了函数绑定、继承和参数灵活传递等高级功能。理解并熟练运用这两个方法对于提升JavaScript编程技能至关...
理解Javascript函数形式参数与arguments 在JavaScript中,函数的形式参数和arguments之间存在着微妙的关系。为了深入理解这方面的知识,我们需要首先了解形式参数和实际参数的概念。形式参数指的是定义方法时所明确...
JavaScript中的`call`和`apply`是两种非常重要的函数调用方式,它们允许开发者改变函数执行的上下文,即函数内部的`this`值。这两个方法的主要区别在于传递参数的方式。 `call`方法的语法是`call(obj, arg1, arg2, ...
在JavaScript的世界里,caller、callee、call和apply是四个非常重要的概念,它们涉及到函数的调用方式和执行上下文。这些知识点对于深入理解和优化代码至关重要,尤其在处理高阶函数和面向对象编程时。 首先,让...
在JavaScript中,call与apply是两个非常重要的关键字,它们的功能是改变函数执行时的上下文,也就是函数体内的this指向。通过call和apply可以调用某个函数,并且显式地指定该函数内部的this变量的值。 ### call和...
JavaScript中arguments、caller、callee、call和apply是与函数相关的几个重要概念和对象。它们为JavaScript的函数提供了非常灵活的功能,特别是在处理函数参数和调用上下文方面。接下来,将对这些概念逐一进行详细...
_bind、call、apply 是 JavaScript 中的三个函数方法,用于改变函数的执行上下文,即改变函数中的 this 指向。下面我们将详细讲解这三个方法的使用和区别。 作用 _bind、call、apply 三者都是改变函数执行时的上...
在JavaScript中,实现对象继承主要有三种方式:原型链继承(prototype)、构造函数继承和call/apply继承。下面将分别详细介绍这三种继承方式的具体用法和实现原理。 1. 原型链继承(prototype) 原型链继承是...
JavaScript中的call方法和apply方法是Function对象自带的两个内置方法,它们都可以改变函数体内this的指向,让一个拥有私有this的函数能够借用另一个对象的this来执行,并能传递参数。这两个方法在很多情况下可以...
总结,`call`和`apply`提供了改变函数执行上下文的能力,而`arguments`对象则允许我们方便地访问函数调用时的所有参数,这些都是JavaScript灵活性和动态性的体现。在实际开发中,掌握这些知识点对于编写高效和灵活的...
与call()相似,apply()的第一个参数也是用来指定函数内部this的指向,但是apply()要求第二个参数必须是数组或者类数组对象(如arguments),然后这个数组中的元素将作为单独的参数传递给函数。如果传入的第二个参数...