【问题标题】:Lexical binding and other binding concepts in Javascript?Javascript 中的词法绑定和其他绑定概念?
【发布时间】:2016-11-25 03:27:44
【问题描述】:

我正试图围绕 Javascript 中的绑定概念展开思考。

你能解释一下Javascript中的词法绑定、动态绑定和其他绑定技术吗?

Javascript 与 Lisp 有何不同?我不知道 Lisp,但我的搜索结果在那个链接中。

非常感谢。

编辑 1: 为什么不需要使用var that = this; 就可以工作?

function Person(name){
    this.name = name;
    setTimeout(() => {
        console.log(this.name);
    }, 100);
}

var me = new Person('Pristine'); // prints "Pristine"

如果我抛出一个function() 代替(),我会得到一个错误。

什么是词法绑定和作用域?一些进一步的例子,利用它的好用例?

【问题讨论】:

  • 那里有很好的资源,请阅读它们和/或询问您想知道的更具体的问题。您的问题有点宽泛,将开始讨论
  • Stack Overflow 用于更集中的“对或错”类型的问题。这不是一个真正的讨论板。请务必查看 the help center 以了解 Stack Overflow 的热门话题。
  • 直接到你的箭头函数问题。它们绑定到调用范围上下文。所以你不必做'var that = this'。
  • 我认为您混淆了绑定和作用域的概念。您包含的示例与您的问题无关。对于绑定,您可以查看我的答案的解释。对于范围,您应该检查en.wikipedia.org/wiki/Scope_(computer_science) 范围是一个完全不同的概念,适用于程序员必须考虑对象和函数的范围的编程阶段。 @ste2425 回答了有关您提供的代码的问题。

标签: javascript angularjs node.js mean-stack


【解决方案1】:

在非常高的层次上,绑定是在编译或运行时将对象或函数与名称相关联的概念。

例如抽象地说,与 function foo 相关的函数在绑定发生之前不会与名称“foo”相关联。

词法绑定(AKA 静态或早期绑定)涉及在编译期间关联名称,构建称为“v-tables”的数据结构。 (V表是程序查找变量和方法的偏移量集合)

动态绑定(AKA 后期绑定)涉及在运行时关联名称。使用动态绑定,没有 v-tables。而是在程序运行时直接查找和关联名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    相关资源
    最近更新 更多