深圳建设高端网站,找客户的100个渠道,网站建设经费申请报告,google推广有效果吗JavaScript的函数中this的指向
JavaScript 语言之所以有 this 的设计#xff0c;跟内存里面的数据结构有关系。
以下例子来简单描述this在不同情况下所指向的对象。
var obj {aa: function(){console.log(this.num)},num: 5
};var aa obj.aa;
var num 10;obj.aa(); // …JavaScript的函数中this的指向
JavaScript 语言之所以有 this 的设计跟内存里面的数据结构有关系。
以下例子来简单描述this在不同情况下所指向的对象。
var obj {aa: function(){console.log(this.num)},num: 5
};var aa obj.aa;
var num 10;obj.aa(); // 5
aa(); // 10对于以上代码obj.aa和aa都是指向同一个函数但其执行输出的结果却是大不相同其原因是他们所指向的函数在内存中是独立保存的。
var obj {aa: 20};上面代码所展示的是将一个对象aa的地址丢给了obj也就是说obj指向的是aa通过obj拿到内存地址读取aa对象返回aa的属性而aa属性中的值为20。 注意aa属性的值保存在aa对象的value属性里面。
而如果value属性中所存的不是固定的数值而是一个函数则存的是函数的地址因为函数在内存中是另外的独立存在。 var obj {aa: function(){console.log(this.num)},num: 5
};obj.aa(); // 5对于aa的value属性中存在函数的地址则在aa中所调用的函数所属的环境存在于obj中即function中this所指向为obj。 在上面代码所指向的this是obj本身this.num所输出的值就是obj中num的value属性所带的值。
var obj {aa: function(){console.log(this.num)},num: 5
};var aa obj.aa;
var num 10;obj.aa(); // 5
aa(); // 10对于obj.aa();调用的函数指向情况和aa();调用的函数指向情况有所不同obj.aa和上面所阐述的一样相当于将函数绑定在obj的环境里面。 而对于var aa obj.aa来说变量aa相当于指向函数本身即aa是一个与function共同存放在全局环境下的函数。 相当于现在的window就好比原来的obj而现在的obj.aa就好比原来的aa即将obj.aa看成一个整体是window环境下的对象value的值为function的地址与num:10并其在window这个环境下面此时this指向的不再是obj而是window即this.num调用的是window下的num:10。