问题标签 [scope-chain]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
33758 浏览

javascript - Javascript 中的作用域链

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

0 投票
1 回答
54 浏览

scope - 是否有任何语言(或调试工具)具有内置函数或方法来打印范围链?

是否有任何语言或调试工具可以打印出作用域链进行检查,从而查看作用域链包含的不同情况?

0 投票
1 回答
280 浏览

ruby - Ruby 的“绑定”和 Scope Chain 一样吗?

Ruby的eval()可以像

其中 block 是传递给函数的块。

除了块之外,还可以传入绑定对象。绑定对象是否与讨论 Javascript 闭包时经常提到的“作用域链”相同?

0 投票
1 回答
406 浏览

ruby-on-rails - 如何按 ActiveRecord 中多态模型的父属性排序?

我觉得我说的很对...

我有一个名为资产的模型,它是多态的:

我有一个充当范围的类级别方法:

我正在尝试获取其父approved_at属性不为空的资产列表,并按该approved_at属性按降序排列,限制为 50。我承认我不确定我所拥有的与正确性有多接近,但我现在得到的错误是:

0 投票
3 回答
271 浏览

c# - C# 和 VB lambda 是否有类似于 javascript 的**范围链**问题?

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

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

顺便说一句,如果答案不是过早的优化是万恶之源,我更愿意

0 投票
2 回答
2448 浏览

javascript - 将回调函数作为字符串传递,同时保留作用域链

对于使用 UIWebView 的 iPad 应用程序,我在 URL 中将回调函数传递给应用程序:

应用程序从 URL 解析回调函数,并通过 stringByEvaluatingJavaScriptFromString 插入一些数据来调用回调函数。这一切都很好。

但是,现在我想在回调函数中使用闭包,如下所示:

这是有问题的。由于回调函数被转换为字符串,所有作用域链信息都会丢失。

关于如何解决这个问题的任何建议?

编辑:

我更喜欢“查询”功能方面的解决方案。例如:有没有办法将作用域链中的变量转换为 eval()-able 字符串?

0 投票
2 回答
725 浏览

activerecord - 为多对多关系编写范围

我有一个包含 3 个模型的应用程序:租户、部门、标准。

我正在尝试在 Renter 模型中创建两个范围,让我可以按部门和标准找到租户。

这是我的代码:

使用

或者

自行工作。但是,当我尝试将它们链接起来时,

我收到一条错误消息:

此外,

关于我做错了什么的任何想法?

0 投票
6 回答
1228 浏览

javascript - 强制在 JS 中向上移动范围链

有没有办法在 Javascript中引用作用域链上的下一个对象?

因此,例如:

0 投票
1 回答
80 浏览

javascript - 它是一种捕获闭包定义堆栈的方法吗?

我目前正在研究一种将 JavaScript 函数保护为private的方法,如果调用者无效,则会引发异常。那么我这里有一个问题:如果在有效调用者内部定义了一个闭包,是否可以从内部闭包中获取有效调用者?

例如:

而且,当然privateFunction1会正确获取调用者validCaller,但privateFunction2会获取匿名函数作为调用者,因此访问将被拒绝。

如果我通过表达式从调用堆栈中获取validCaller,这不是正确的方法caller.caller.caller,因为我无法确定我应该回溯多少级,并且在某些特殊情况下,匿名函数需要在validCaller.

也许我用复杂的方式问了这个问题,简单的方法是:

如何捕获函数的作用域链?

0 投票
2 回答
94 浏览

javascript - 对象字面量中的范围链

请解释作用域链是如何在这里设置的。为什么xincheckVarsassignskip 对象的范围解析mod