问题标签 [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.
perl - Perl 5.12.3 的引用计数问题?
似乎它清理垫太早了:
我得到的是:
或者,如果有人能指出我正在做的蠢事,我将不胜感激。我什至在第一个闭包和外部闭包之间创建了增量变量,但它们也被重置了。即使在最里面的闭包上设置引用,在命名的子范围内也得不到任何东西!
这里涉及的整个代码是 500 行。包含代码是不切实际的。
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)都不需要使用请求范围变量的情况。使用我错过的请求范围有什么原因吗?
emacs - Emacs 24 中变量作用域的新规则是什么?
Emacs 24 现在有词法范围的变量。当然,它还具有动态范围的变量。既然它两者都有,我对变量何时具有哪种范围感到很困惑。有一个lexical-binding
变量控制何时启用词法绑定,我想我读过一些关于defvar
现在声明一个动态范围变量的内容,但总的来说我很迷茫。Emacs 24 的新范围规则是否有很好的解释?或者换一种说法,当我查看为 Emacs 24 编写的 Emacs Lisp 代码中的一个变量时,我如何知道该变量正在使用什么范围?
ruby - 在 Ruby 中,如何向对象添加一种可以访问外部范围内变量的方法?
我是红宝石的新手。我正处于尝试用 Ruby 写东西的阶段,就像我用其他语言一样。
我正在尝试向一个对象添加一个方法——比如说,一个不起眼的数组。并非针对所有阵列,仅针对一个特定阵列。此方法必须有权访问外部范围内的变量。
我的理解是,我可以使用def
向对象添加方法,但该方法无法访问外部范围内的变量。为此,我需要使用lambda
or Proc.new
,但我看不到如何将 lambda/proc 作为属性“附加”到数组。
在 JavaScript 中,这很简单,正如这个愚蠢的示例所示:
在 Ruby 中是否有可能与上述类似的东西?
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:
- I don't want to pollute the test file's higher-level namespace.
- 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?
javascript - 在对象原型方法中的 setInterval/setTimeout 中引用“this”
通常,当在 setInterval 中引用“this”时,我会分配一个替代的“self”引用。是否有可能在原型方法的上下文中完成类似的事情?以下代码错误。
javascript - JS范围问题
考虑以下代码:
当我用 JSLint 检查这个时,它抱怨level
在第二个 return 语句中是used out of scope.
.
但为什么?AFAIK,JavaScript 具有词法作用域/函数作用域。由于没有嵌套函数,代码应该是完全有效的。还是我错过了什么?
c# - lambda 中的 Alpha 转换
为什么 C# 不支持 alpha 转换?
屈服:
不能在此范围内声明名为“n”的局部变量,因为它会给“n”赋予不同的含义,后者已在“父或当前”范围中用于表示其他内容
是否有任何我不知道的具体原因,因为它听起来很傻?
language-agnostic - 词法作用域和静态作用域有什么区别?
在为那些来自其他语言的人进行 R 编程时, John Cook 说
R 使用词法作用域,而 S-PLUS 使用静态作用域。差异可能很微妙,尤其是在使用闭包时。
我觉得这很奇怪,因为我一直认为词法作用域和静态作用域是同义词。
词汇和静态作用域是否有不同的属性,或者这是从社区到社区、个人到个人的区别?如果是这样,一般营地是什么,我如何区分它们,以便我可以更好地理解某人使用这些词时的含义。
ruby - 块看不到方法(厨师资源)
假设我们有两个资源:
我想在资源中重用代码。但是,如果我在配方中定义了一个 proc,你会得到一个 NoMethodErrorowner
等group
。为什么会这样?词法范围没有什么不同,是吗?结果我不得不使用self.instance_eval &common_cfg
.