在一个JavaScript文件中,我看到:

function Somefunction(){
   var that = this; 
   ... 
}

声明that并将this分配给它的目的是什么?

推荐答案

我将从一个例子开始回答这个问题:

var colours = ['red', 'green', 'blue'];
document.getElementById('element').addEventListener('click', function() {
    // this is a reference to the element clicked on

    var that = this;

    colours.forEach(function() {
        // this is undefined
        // that is a reference to the element clicked on
    });
});

我的回答最初是用jQuery来证明这一点的,它只是略有不同:

$('#element').click(function(){
    // this is a reference to the element clicked on

    var that = this;

    $('.elements').each(function(){
        // this is a reference to the current element in the loop
        // that is still a reference to the element clicked on
    });
});

因为当你通过调用一个新函数来改变作用域时,this经常改变,所以你不能通过使用它来访问原始值.将其别名设置为that仍允许访问原始值this.

就我个人而言,我不喜欢使用that作为别名.很难看出它指的是什么,特别是当函数超过几行时.I always使用更具描述性的别名.在上面的示例中,我可能会使用clickedEl.

Javascript相关问答推荐

如何在非独立组件中使用独立组件?

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

仅圆角的甜甜圈图表

Bootstrap动态选项卡在切换选项卡后保持活动状态,导致元素堆叠

单击子元素时关闭父元素(JS)

使用下表中所示的值初始化一个二维数组

如何在Javascript中的控制台上以一行形式打印循环的结果

如何让npx在windows中运行js脚本?

setcallback是什么时候放到macrotask队列上的?

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

虚拟滚动实现使向下滚动可滚动到末尾

我的角模板订阅后不刷新'

Eval vs函数()返回语义

如何将数据块添加到d3力有向图中?

Use Location位置成员在HashRouter内为空

如何在.NET Core中将chtml文件链接到Java脚本文件?

为什么JPG图像不能在VITE中导入以进行react ?

MongoDB通过数字或字符串过滤列表

如何将字符串拆分成单词并跟踪每个单词的索引(在原始字符串中)?

如何用react组件替换dom元素?