JavaScript函数内部属性的介绍(附示例)
本篇文章给大家带来的内容是关于JavaScript函数内部属性的介绍(附示例),有必然的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。
函数内部有两个非凡对象,this、arguments,其中arguments是一个类数组对象,包括着传入函数中的所有参数,主要用来留存函数参数。arguments对象还有一个callee属性,callee是一个指针,指向具有这个arguments对象的函数。
callee
function fact(num){ if(num<=1){ return 1; }else{ return num*fact(num-1); } }
这是一个实现阶乘的函数,采纳递归的方式,这种方式存在一个问题就是,当fact的名称更换今后,假如不及时更换函数内部的函数名称,该函数则无效。此时采纳callee属性替换当前具有num参数对象的函数也就是fact.
采纳callee实现如下
function fact(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } }
this
this援用的是函数施行的环境对象,当函数被当做某个对象的办法调取时,此时的this对象援用的是当前调取函数的对象。
不一样的环境this指向的值不一样,下面是几种this在不一样施行环境下所指向的值
办法调取
当函数作为对象办法的时候,函数里的this被绑定到当前对象上(也可以称之为办法调取)
例如:
var myNum = { value:1, increment:function(arg){ this.value +=arg; } }; myNum.increment(3); console.log('example1:'+myNum.value);//example1:4
上述的increment是一个对象办法,该对象办法内部的this指向的就是当前对象
函数调取
当函数作为非对象办法时候,this绑定到全局对象window,假如此时要调取内部函数可以采纳that = this。
// 一样的函数 function add(a){ return a+2 ; } var value = 2; myNum.count = function (){ let value = 1; let help = function(){ this.value = add(this.value); } help(); console.log(this.value);//4 } myNum.count(); that = this方式 var value = 2; myNum.count = function (){ let value = 1; let that = this; let help = function(){ that.value = add(that.value); } help(); console.log(that.value);//3 } myNum.count();
结构函数
用new运算符调取结构函数,会先创立一个连接到结构函数的prototype(原型对象),再将this绑定到该对象
function Person(name){ this.name = name; } Person.prototype.sayName = function(){ return this.name; } var person1 = new Person('TOM'); console.log(person1.sayName());
apply\call\bind
绑定this到指定的环境对象
var people = { name:"LILY" } console.log(Person.prototype.sayName.apply(people)); console.log(Person.prototype.sayName.bind(people)()); console.log(Person.prototype.sayName.call(people));
call :办法调取一个具有给定this值的函数,乃至供给的参数列表。
apply: 办法调取一个具有给定this值的函数,乃至供给的参数(数组或类数组对象)。
bind :办法创立一个新的函数,调取时设定this关键字为供给的“值”。
ES6 箭头函数
es6箭头函数里的this指向定义时所在的对象,不是施行的环境对象,就说明this在箭头函数里使用时是一个不变的值
function foo(){ setTimeout(()=>{ console.log('name:',this.name); },1000) } var name = "kiki"; foo.call({name:"didi"});//name:didi
箭头函数里this的值指向的是定义时所在的环境对象,es5中实现箭头函数的办法:采纳 that = this这种机制,实现this的绑定
以上是对函数的内部属性的懂得。
以上就是JavaScript函数内部属性的介绍(附示例)的具体内容,更多请关注百分百源码网其它相关文章!