问题标签 [lexical-scope]

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 投票
2 回答
122 浏览

perl - Perl 5.12.3 的引用计数问题?

似乎它清理垫太早了:

我得到的是:

或者,如果有人能指出我正在做的蠢事,我将不胜感激。我什至在第一个闭包和外部闭包之间创建了增量变量,但它们也被重置了。即使在最里面的闭包上设置引用,在命名的子范围内也得不到任何东西!

这里涉及的整个代码是 500 行。包含代码是不切实际的。

0 投票
1 回答
26988 浏览

jsp - 什么时候适合在 JSP 中设置请求范围的变量?

根据我的经验,很少/从不需要设置scope="request"EL 变量。

例如,我有一个页面,给定一个item参数,根据其属性构造一个特定于该项目的 URL。此页面包含在需要呈现项目链接的任何页面中。

(A) 使用请求范围的变量

itemLink.jsp

其他页面.jsp

(B) 没有请求范围的变量

itemLink.jsp

其他页面.jsp

有什么理由使用(A)而不是(B)吗?我的回答是否定的,理由如下:

  • 使用(A),您需要记住在同一请求期间处理的任何其他页面都会看到itemUrl,因此您应该避免名称冲突。它还使得跟踪 EL 变量的来源变得更加困难,因为除了搜索在同一请求期间处理的所有页面之外,无法找到请求范围变量的设置位置。

  • 使用(B),这些都不是问题,因为变量只有页面范围。

编辑:

也许有比(B)更好的解决方案:

(C) 使用静态包含

itemLink.jspf

其他页面.jsp

仍然存在替代方案(B)(C)都不需要使用请求范围变量的情况。使用我错过的请求范围有什么原因吗?

0 投票
2 回答
2055 浏览

emacs - Emacs 24 中变量作用域的新规则是什么?

Emacs 24 现在有词法范围的变量。当然,它还具有动态范围的变量。既然它两者都有,我对变量何时具有哪种范围感到很困惑。有一个lexical-binding变量控制何时启用词法绑定,我想我读过一些关于defvar现在声明一个动态范围变量的内容,但总的来说我很迷茫。Emacs 24 的新范围规则是否有很好的解释?或者换一种说法,当我查看为 Emacs 24 编写的 Emacs Lisp 代码中的一个变量时,我如何知道该变量正在使用什么范围?

0 投票
3 回答
511 浏览

ruby - 在 Ruby 中,如何向对象添加一种可以访问外部范围内变量的方法?

我是红宝石的新手。我正处于尝试用 Ruby 写东西的阶段,就像我用其他语言一样。

我正在尝试向一个对象添加一个方法——比如说,一个不起眼的数组。并非针对所有阵列,仅针对一个特定阵列。此方法必须有权访问外部范围内的变量。

我的理解是,我可以使用def向对象添加方法,但该方法无法访问外部范围内的变量。为此,我需要使用lambdaor Proc.new,但我看不到如何将 lambda/proc 作为属性“附加”到数组。

在 JavaScript 中,这很简单,正如这个愚蠢的示例所示:

在 Ruby 中是否有可能与上述类似的东西?

0 投票
4 回答
464 浏览

perl - Trying to localize an outside package variable through a lexical binding in Perl

It's a long title, but I'm afraid I can't take a single word out without losing the true meaning of the question. I'll give a quick description of what I'm trying to achieve first, then a long rambling on why I want it done this way. Skip the rambling if you intend to directly answer abiding with the question title :-)

Quick description

Assuming the existence of a lexicalize builtin that does just what I want, here goes:

Whys and whynots

For a bit of context, I'm whitebox-testing a third-party module.

I want the variable localized because I want it changed for a limited time only, before the tests move on to something else. local is the best way I found to do this without depending on knowing the module's choice for an initial value.

I want a lexical binding for two main reasons:

  1. I don't want to pollute the test file's higher-level namespace.
  2. I want something shorter than the fully-qualified name. It's not in the sample code for brevity, but I use the identifier a lot more than what's shown, with calculations and updates relative to its previous value.

I couldn't decently use our because it won't grab a variable from another package: “No package name allowed for variable $Other::Package::var in "our".” Cheating to temporarily enter Other::Package's scope doesn't cut it: if I use a block ({ package Other::Package; our $var }) then the binding doesn't last long enough to be useful; and if I don't (package Other::Package; our @var; package main) then I need to know and copy the previous package's name, which prevents moving that piece of code around too much.

While doing my homework before asking a previous form of this question, I discovered Lexical::Var, which seemed like it would be exactly what I needed. Alas: “Can't localize through a reference.”</p>

I've also tried my best on my gut feeling of my *var-based forms, but kept bumping into syntax errors. I've learned more than I cared to about scoping and binding today :-)

I can't think of a reason why what I want shouldn't be possible, but I can't find the right incantation. Am I asking for an unfortunate unimplemented edge case?

0 投票
2 回答
34298 浏览

javascript - 在对象原型方法中的 setInterval/setTimeout 中引用“this”

通常,当在 setInterval 中引用“this”时,我会分配一个替代的“self”引用。是否有可能在原型方法的上下文中完成类似的事情?以下代码错误。

0 投票
3 回答
111 浏览

javascript - JS范围问题

考虑以下代码:

当我用 JSLint 检查这个时,它抱怨level在第二个 return 语句中是used out of scope..

但为什么?AFAIK,JavaScript 具有词法作用域/函数作用域。由于没有嵌套函数,代码应该是完全有效的。还是我错过了什么?

0 投票
4 回答
550 浏览

c# - lambda 中的 Alpha 转换

为什么 C# 不支持 alpha 转换?

屈服:

不能在此范围内声明名为“n”的局部变量,因为它会给“n”赋予不同的含义,后者已在“父或当前”范围中用于表示其他内容

是否有任何我不知道的具体原因,因为它听起来很傻?

0 投票
2 回答
1269 浏览

language-agnostic - 词法作用域和静态作用域有什么区别?

为那些来自其他语言的人进行 R 编程时, John Cook 说

R 使用词法作用域,而 S-PLUS 使用静态作用域。差异可能很微妙,尤其是在使用闭包时。

我觉得这很奇怪,因为我一直认为词法作用域和静态作用域是同义词。

词汇和静态作用域是否有不同的属性,或者这是从社区到社区、个人到个人的区别?如果是这样,一般营地是什么,我如何区分它们,以便我可以更好地理解某人使用这些词时的含义。

0 投票
1 回答
1535 浏览

ruby - 块看不到方法(厨师资源)

假设我们有两个资源:

我想在资源中重用代码。但是,如果我在配方中定义了一个 proc,你会得到一个 NoMethodErrorownergroup。为什么会这样?词法范围没有什么不同,是吗?结果我不得不使用self.instance_eval &common_cfg.