标签: scope-chain

Javascript中的范围链

我在Javascript中阅读范围链但它对我没有任何意义,任何人都可以告诉我什么是范围链以及它如何与图形或甚至白痴都能理解的东西一起工作.我用谷歌搜索但我没有找到可理解的东西:(

提前致谢.

javascript scope-chain

54
推荐指数
5
解决办法
3万
查看次数

我的函数以某种方式无法访问其父闭包并且缺少变量.怎么样?

在我的顶级函数中,我使用require.js导入一些依赖项.他们在那里,没问题.在这个函数中,我定义了一个回调函数,并尝试使用通过require.js导入的一些变量,即父闭包中的变量.

他们只是不在那里,正如一个断点和偷看Chrome检查员的Scope Variables面板所证实的那样.

我理解这一点fn.apply和朋友只是设置上下文this,而不是他们可以销毁对闭包的引用或改变范围链.

define([
    'backbone',
    'backbone.vent',
    'app/utils/foo',
    'app/services/intent'
], function(Backbone, Vent, Foo) {
    'use strict';

    // Backbone, Vent, and Foo are defined here

    Vent.on('myevent', function(options) {
        // Backbone is defined here, but not Vent or Foo.
    });
});
Run Code Online (Sandbox Code Playgroud)

这怎么可能呢?

我该如何解决?

javascript closures scope scope-chain requirejs

13
推荐指数
1
解决办法
1756
查看次数

范围链查找与原型查找 - 何时

如果变量在需要时在函数中不可用,那么它将在作用域链中查找(这是一个闭包),但有时它会在原型链中进行搜索.我正试着把头包裹起来,当时正在发生这种情况.我想知道是否有人可以为我清除薄雾,或者让我参考一些专门讨论这个主题的文献.

例如,我是否正确地说: - 对象和因此与上下文绑定的公共变量(this)总是在原型链中查找? - 私有变量总是在作用域链中查找(即执行上下文中的函数链)? - 当程序同时查看两者中的任何一种情况时是否存在?

我测试了三种不同的场景(范围链查找,原型查找和没有查找),但不幸的是它没有足够的帮助到达底部.

    var Food = function(){
    var t = 1;  // for closure

    this.timeToPrepare = function(){    // Scope chain lookup
        console.log(t * 3);
    };

    this.timeToMake = function(){   // This is looked up in the prototype chain
        console.log(this.t * 3);
    };

    this.timeToEat = function(t){   //No lookup
        console.log(t * 3);
    };

    };

    Food.prototype.t = 2;

    (function(){
    var pizza = new Food;
    pizza.timeToPrepare();  //3
    pizza.timeToMake();     //6
    pizza.timeToEat(3);     //9
    })();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

谢谢!

javascript closures scope-chain prototypal-inheritance

11
推荐指数
1
解决办法
1830
查看次数

C#和VB lambdas有**范围链**问题类似于javascript吗?

我已经读过了由于范围链如何在javascript中工作,如果我们希望引用未在F范围内声明的函数F中的变量V,那么声明一个是有益的(在性能方面是肯定的) F中的局部变量V2引用V,然后访问V引用的对象到V2.

我想知道这个概念是否适用于C#和VB中的闭包(通过lambdas访问函数中的局部变量)

Public Shared Function Example()
    Dim a = 1
    Dim b = New Object
    Return Sub()
               'when we use the variables a and b from here does it have to "go up the scope chain"
           End Sub
End Function
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果答案不是过早的优化,那么我更愿意是所有邪恶的根源

javascript c# vb.net scope scope-chain

4
推荐指数
2
解决办法
222
查看次数

对象文字中的范围链

var x = 9;
var mod = {
    x: 81,
    assign: function(){
        this.x = 9;
        x = 3;
    },
    checkVars: function(){
        alert(x + " - " + this.x );
    }
};

mod.checkVars(); //9 - 81

mod.assign();
mod.checkVars(); //3 - 9

alert(x); //3
Run Code Online (Sandbox Code Playgroud)

请解释范围链如何在这里设置自己.为什么范围解析为xin checkVarsassignskip对象mod

javascript oop object scope-chain

2
推荐指数
1
解决办法
93
查看次数