为什么下划线使用`root`而不是`this`?

时间:2014-05-26 15:57:56

标签: javascript underscore.js

在某些情况下,我会看到别名来减少查找链,但在这种情况下,它是一个简单的单行别名,没有减少。

var root = this;

我认为this更具描述性,因为如果JavaScript在服务器端运行,它将指向浏览器中的window或许多不同的全局变量。

如果必须别名,我觉得

var global = this;

会更具描述性。

为什么使用root这个词?我听说root用在“root用户”的上下文中,但是在JavaScript开发的上下文中,我没有得到它。

3 个答案:

答案 0 :(得分:3)

this的含义可以在闭包中改变。

function doSomething() {
    function helper() {
        alert(this); // I'm helping!
    }

    alert(this);
    helper();
}
someElement.onclick = doSomething;

虽然您可能期望两个警报显示相同,但​​第二个警报实际上会引用全局对象(或者我认为在严格模式下为null)。

执行var root = this;意味着您可以可靠地调用某些内容,而这些内容不会意外地发生变化。

名称root ......好吧,它只是一个名字。

答案 1 :(得分:1)

  

在某些情况下,我看到别名会减少查找链,但在这种情况下,它是一个简单的单行别名,没有减少。

它在缩小方面有一点优势。 root可以缩小为一个字母,this的多次使用不能。另请参阅Is me = this in JavaScript a good practice to support minification?

此外,root:函数

中的_.noConflict = function() { root._ = previousUnderscore; return this; }; 变量已关闭
root

如果没有_.noConflict = function() { this._ = previousUnderscore; return _; }.bind(this); ,则需要将其重写为

var global = this;
  

如果必须使用别名,我觉得global会更具描述性。为什么使用root这个词?

是的,global也会很好 - 只是因为root 这个对象的Node中使用的标识符,它可能会增加混乱。 {{1}}代表"根范围"或"根对象"这里。

答案 2 :(得分:0)

它在noConflict函数中使用root

 _.noConflict = function() {
    root._ = previousUnderscore;
    return this;
  };

此处this下划线,指向全局范围

对于root而不是global,这是一个意见问题