问题标签 [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.

0 投票
3 回答
4129 浏览

javascript - javascript:如何在函数本身中引用匿名函数?

如果“使用严格”中不允许 arguments.callee,我们不能这样做

因为在 IE 中不起作用(或者会“奇怪”地起作用)http://kangax.github.com/nfe/#jscript-bugs,那么我们还有哪些其他选项可以引用函数中的匿名函数本身?

0 投票
4 回答
3859 浏览

r - attach() 函数内部

我想给一个函数提供一个 params 参数,然后附加它,这样我每次引用列表元素 a 时都可以使用 a 而不是 params$a。

这有问题吗?如果我定义了一个名为 c 的全局变量,并且还定义了列表 "params" 的一个名为 c 的元素,那么在附加命令之后将使用其值吗?

0 投票
2 回答
500 浏览

javascript - Javascript 范围问题:无法通过传递给函数的“this”obj 更改元素,但我可以使用速记方法

修改后的问题(原文见下文):

这是一个简单的 ajax 加载示例,在加载的内容中的元素上具有事件绑定:

soTest.htm

Ajax加载的内容,soTest2.htm:

那么为什么这不起作用:

但这确实:


++++++++++原始问题:++++++++++

我有一个表格,当单击特定表格标题(具有“排序”类的标题)时,我想对其进行排序。
例如:

为此,我有以下代码:

因此,在这些可排序列标题之一的单击事件中,我将整个“this”范围存储在 var 中以传递给该函数。

为了简化问题,我只想说我们正在尝试根据我正在使用的自定义 attr 'direction' 更改单击元素的背景颜色:

我假设我不了解 javascript 范围的某些方面(理解“this”对我来说非常难以捉摸)。

问题总结:

如果我将一个 var'd 'this' 范围传递给一个函数,为什么我不能更改 'this' 元素的各个方面,为什么我必须使用很长的方法来更改它们?

对我来说是一个棘手的问题,希望我做得足够好。

谢谢!

0 投票
5 回答
3422 浏览

python - python noobie 范围问题

我写了这段代码:

尝试测试 python 是词法范围还是动态范围。我的想法是

应该打印 0 还是 1,这将告诉我 python 的作用域。但是,调用 y 会引发异常,指出 x 未定义。我对 Python 工作原理的理解似乎存在根本性的缺陷。

有人可以解释这是如何工作的吗?是的,我知道这可以很容易地使用对象来完成。我正在尝试探索在不使用对象的情况下赋予函数状态的想法。我这样写代码是因为上面翻译成像Scheme这样的词法范围语言肯定会起作用。

0 投票
3 回答
834 浏览

closures - javascript:如何使模块同时表现得像对象和函数?

我正在尝试为自己构建一个小助手库。首先,出于学习目的,然后我可以扩展它,以便在项目中派上用场。

我对原型引用、闭包和作用域有所了解。我还故意使用模块化模式来制作它,这样我toolbox就不会污染全局命名空间。我也知道我们可以将原型分配给构造函数,因此构造的对象将保存这些方法。

下面是内容toolbox.js

并调用toolbox

但是像这样修改上面的代码:

将工作。

所以我的问题是为什么toolbox.prototype = {} 不这样做,而pick.prototype = {}pick继承定义的方法?

我想同时实现这两个目标toolbox.tell("something");,并且toolbox("div").raw();不必直接将方法原型化到模块中。

请帮忙!我已经在谷歌上搜索了好几天来学习这些,现在我被困住了。非常感谢您的帮助!

更新

简而言之,jQuery 是如何做到这一点的:

0 投票
2 回答
472 浏览

php - 在 php 中使用“全局”

我在这里处于学习模式,对 PHP 非常陌生,所以我正在使用代码示例。请原谅我在这里使用“全局”,但我想了解 php 变量范围。

这是 myGlobals.php:

这是connectToDb.php:

这是 addDbRecords.php:

这是 index.php:

这是问题所在。当我doAddDeleteRecord($db_server)在上面的文件 addDbRecords.php 中调用时,$db_server它是无效的——它是空的——当我调用时mysql_query(.., $db_server, ...) ——这是错误消息:

“警告:mysql_query() 期望参数 2 是资源,在第 29 行的 C:\xampp\htdocs\addDbRecords.php 中给出 null”

所以我尝试在内部使用“全局”声明doAddDeleteRecord()(上面注释掉)——没有变化。
仍然以mysql_query(...)NULL 值失败$db_server

我知道这项mysql_connect(....)工作,因为其他代码成功地将我的所有记录从我的数据库中提取出来(使用 SELECT),并且现有记录在浏览器中正确显示。

所以在我看来,用'global'声明的事实$db_server应该意味着$db_server一旦mysql_connect(...)被调用——在我所有文件的文件范围内,它的范围$db_server将是与我的数据库的有效连接。

我只是想了解php 范围,而不是 OOAD 或其他任何东西(现在)。为什么$db_server()这里是空的?

0 投票
1 回答
1894 浏览

jsf - JSF2/Facelets 中的私有/作用域变量?

我可能没有正确思考 JSF 中的可视化组件,但我想这是我的问题的一部分。我的问题是围绕 JSF <ui:component> 实现中声明的变量似乎缺乏范围。

所以,假设我有 /resources/comp/myPanel.xhtml:

并且有一个资源包被加载到该组件中,panelOnly/bundle.properties:

然后我有一个放置 myPanel 组件 mainPage.xhtml 的页面:

并且有一个资源包被加载到主页中,mainPage/bundle.properties:

现在,我假设我的页面应该呈现为:

但是,相反,我得到:

我认为这是因为我破坏了组件中“bundle”符号所指的内容,因此当 mainPage.xhtml 尝试解析该值时,它会查看组件的“bundle”对象而不是原始 mainPage 的对象。

迄今为止,我的解决方法是在我的组件中使用唯一的命名变量,这些变量永远不会与我的主页上的变量发生冲突。但如果有一种方法可以让 JSF 将我的组件中声明的任何内容识别为本地范围的变量,而不是破坏调用者的符号,我会更愿意。

我认为还有其他标签可以用来在#{cc.attrs...} 下制作局部范围的变量。如果您可以在答案中列举我的本地范围选项,那将非常有帮助。我怀疑我的 <f:loadBundle> 是一种特殊情况,并且可能没有解决方法,因为它不是在设计时考虑到 <ui:component> 的。

谢谢!

PS 我正在运行 Mojarra 2.1.1 (FCS 20110408)

(针对格式化和复制粘贴错误进行了编辑,2011 年 6 月 15 日)

0 投票
3 回答
74 浏览

javascript - javascript变量作用域

为什么javascript允许在本地代码中创建全局变量?
一个例子

0 投票
1 回答
3033 浏览

types - Ocaml中“type ...and”和“let ...and”之间的范围不一致

我想知道为什么在 OCaml 中,let ... and没有与type ... and.

以下是可以的,与以下内容t2在同一范围内t1

以下是错误的,v2不在范围内:

甚至let rec不起作用:

type... and为什么和之间的范围界定不一致 let...and

0 投票
1 回答
299 浏览

ruby-on-rails-3 - 在 rails3 中使用作用域进行 Eagerloading

我一直在尝试根据我的 rails3 应用程序中的某些范围急切加载关联,但找不到任何解决方案。

我的应用有以下型号:

在 projects#index 我有以下代码来获取用户的所有项目:

它获取用户的所有项目,以及预先加载关联。因此,当我执行以下循环以获取项目中的所有条目时,不会触发任何新查询。

由于这种急切的加载会获取所有条目,因此数据量比我实际需要的要多。所以我尝试对急切加载的条目应用一些条件,但找不到任何解决方案。我正在寻找类似的东西:

这样只有满足某些条件的条目才会被加载。

我们不能在急切加载中使用范围吗?请帮助我在范围界定的同时使用 eagerloading。