javascript – 是否最好使用“this”或“that”(其中var = this)?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 是否最好使用“this”或“that”(其中var = this)?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2073字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 是否最好使用“this”或“that”(其中var = this)?](/upload/InfoBanner/zyjiaocheng/732/13578031aff34560a60aa4a6d6699790.jpg)
我是JavaScript的新手,我正在清理我下载的一些JavaScript代码.此代码中的一个不一致是混合使用this和引用它的局部变量.
示例代码段(jQuery UI小部件中的私有方法):
_populateLists: function(options) {
//do stuff with this
var that = this;
options.each(function(index) {
//use both this AND that, they are different in this scope
});
//here this and that are the same thing
//I want to be consistent, is one preferable over the other?
},
在整个代码的许多地方,范围是这样的=即,即使在同一行代码中也存在混合使用.
为了便于阅读和维护,是否最好使用这个或那个?
注意:我意识到很多这类事情都取决于开发人员的偏好.但在我决定重写代码以使用其中一个代码之前,我想了解任何推理,如果/为什么一个优先于另一个.
编辑:在这个脚本中,我认为这个被分配给局部变量的唯一原因是它可以从内部闭包中引用.
解决方法:
通常将此值赋给局部变量的原因是您可以关闭该值并在嵌套函数中使用它.
这是一个特殊变量,与普通局部变量略有不同,它自动设置为调用函数的对象(如果有的话);否则,全局对象.然而,jQuery对call和apply的自由使用允许调用者指定其值,因此这种内在价值有些混乱.
在嵌套函数中,这不会继承其父级的值,就像它通过作用域链继承父级的局部变量一样.
因此,如果我们在嵌套函数中需要它,我们必须将它的值隐藏在局部变量中,例如示例中的每个回调.
var a = { fn: function() {
// here, `this` is the object `a`
var x = this;
function b() {
// here, `this` is `window` because `b` is invoked with no context
// ...but we still have access to `x`, whose value would be `a`
}
b();
}};
a.fn(); // by invoking `fn` as a property of `a`, we implicitly set `fn`'s
// `this` to `a`.
// Compare to:
var f = a.fn;
f(); // we now invoke `fn` with no context, so its `this` will be `window`.
a.fn.call(window); // or by specifying context explicitly
当然,当你仍然在父范围内时,这仍然等于(或自我或其他).乍一看,似乎两者之间没有区别,但有一个重要的性能影响:
缩小.如果将其分配给局部变量,则对该变量的所有引用都可以减少为一个字符.对此的引用不能.比较这个缩小的输出:
function a() {this.w=1;this.x=2;this.y=3;this.z=4;}
function b() {var t=this;t.w=1;t.x=2;t.y=3;t.z=4;}
有4个引用,您可以使用变量来保存字节.如果你必须为内部函数捕获它,那么在外部函数中使用局部变量代替这个,即使只有一个引用也可以节省.
内容总结
以上是互联网集市为您收集整理的javascript – 是否最好使用“this”或“that”(其中var = this)?全部内容,希望文章能够帮你解决javascript – 是否最好使用“this”或“that”(其中var = this)?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。