问题标签 [scoping]
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.
c++ - 为什么在嵌套 FOR 循环中使用相同的计数变量名称有效?
为什么以下没有给出错误?
我理解它的方式,大括号({...})中的变量仅在这些大括号内。但是内循环在外循环的大括号内。所以一旦我声明int i=0
了内部循环,我不应该得到关于多个定义的错误吗?
perl - 为什么我的 Perl 子例程在调用它的 foreach 循环中看不到变量的值?
我希望这是我做错了的直截了当的事情。我在网上看到了一些关于“变量自杀”的东西,看起来不错,但它是针对旧版本的,我在 5.10.1 上。
无论如何 - 我声明的一个变量 - $RootDirectory - 突然失去了它的价值,我不知道为什么。
这是重现问题的脚本。当我在调试模式下运行脚本(perl -d)时,我可以让它在第 21 行和第 26 行打印出 $RootDirectory。但它在第 30 行消失了。
编辑感谢所有评论!我想现在我会使用“我们的”关键字,它看起来效果很好——谢谢内森。还要感谢有关使用警告的工具 - 我想我已经卖掉了那个!
继续让我感到困惑的是,为什么当我执行调试模式 (perl -d) 并单步执行代码时,执行“p $RootDirectory”时,我在第 21 行和第 26 行得到了预期的输出,但在第 30 行却没有。如何第 30 行的情况是否有所不同?
另外,我很欣赏关于将 $RootDirectory 作为函数参数传递的最佳实践的评论。我想避免这种情况,因为在这之后我有很多函数——即 RunSchema 调用调用 SQLExecFolder 的 CreateTables。所有这些都必须传递相同的参数。在这种情况下它仍然有意义,还是有更好的方法来构建它?
ruby - 当最后一个引用超出范围时,为什么我的 Ruby 对象没有被删除?
在尝试追踪 Rails 应用程序中的内存泄漏时,我发现了一个奇怪的效果。谁能解释这里发生了什么?
将此脚本保存为纯 Ruby 脚本(不需要 Rails):
当我通过
我得到以下信息:
虽然变量 f 超出了范围,但没有其他对单个 Fnord 对象的引用,而且我已经收集了垃圾,该对象似乎仍然存在。这是某种邪恶的内存泄漏,还是我完全错过了关于 Ruby 的一些东西?
此外,如果我将测试方法更改为:
我没有输出。但这肯定不应该改变这里的语义吗?
非常感谢!
r - 您如何在 R 中使用“<<-”(范围分配)?
我刚刚读完R intro 中关于范围界定的<<-
内容,并且对这项任务非常好奇。
该手册显示了一个(非常有趣的)示例<<-
,我觉得我理解了。我仍然缺少的是何时有用的上下文。
所以我很想从你那里读到一些例子(或例子的链接),关于什么时候使用<<-
可以是有趣/有用的。使用它可能有什么危险(看起来很容易忘记),以及您可能想要分享的任何提示。
sql - SQL Server 中派生表的范围
我最近一直在研究 SQL 并进行了一些探索。关于临时表,我发现了 3 种不同的临时表类型:
1)创建表#TempTable
2)声明表@TempTable
3) SELECT * FROM (SELECT * FROM Customers) AS TempTable
现在我了解了#TempTable 和@TempTable 类型背后的范围,但是如示例3 中的派生表呢?这个派生表存储在哪里?如果它在 1 个事务中声明,第二个事务可以访问它,还是派生表的范围与示例 1 和 2 相同?
perl - Perl 模块中的作用域是如何工作的?
我真的不明白 Perl 模块中的作用域是如何工作的。这不会打印任何东西。如果运行 a.pl 打印 1 我希望
下午
a.pl
reflection - 为什么我不能绑定 EMAIL 之类的东西!在解释器启动的全球背景下?
当我启动 R3 Alpha 99 会话并将其作为第一个命令输入时,出现错误:
但是,如果我退出,重新启动并改为执行测试以证明email?
原语像对象一样存在于全局上下文中system
,则测试本身会使我的别名起作用:
这里发生了什么?
c# - Lambda 变量范围
例子:
一个变量“s”在 lambda 中定义,另一个变量“s”定义为同一方法中的局部变量。当我将鼠标悬停在第一个“s”上时,Visual Studio 告诉我“下面定义了一个冲突的变量”。为什么这些是相互矛盾的;lambda 中的“s”在其括号之外肯定不可用吗?
javascript - 我可以在 Javascript 中“扩展”闭包定义的“类”吗?
我有一个这样定义的Javascript“类”:
有没有办法以这样的方式“子类化” Welcomer
,我可以重新定义公共方法并可以访问私有方法和变量?以下将使我能够访问公共方法,但不能访问私有方法:
python - Python范围和线程问题
我有一个线程插入 queueStream(此处未显示)和 FlowController,如果队列不为空,FlowController 是另一个从队列中弹出的线程。
我使用 addToQueue() 中的调试代码验证了数据已正确插入队列
问题是,FlowController 中的“if queueStream”语句总是将 queueStream 视为空,而是转到 else 语句。
我是 Python 新手,我觉得我错过了一些简单的范围规则。我正在使用“全局队列流”,但这似乎没有做任何事情。
谢谢你的帮助。
编辑::::::::::::
感谢你目前的帮助。Queue 文档很好,自从 get() 函数块以来,它帮助我编写了更简洁的代码(酷!)。无论如何,它仍然没有解决我的问题,但是我在将 queueStream 实例传递给 FlowController 之前和之后打印了它,它们有两个不同的内存位置。这就是为什么我相信 FlowController 的队列中没有弹出任何内容。这是否意味着 Python 按值而不是按引用传递 queueStream?如果是这样,我该如何解决?