问题标签 [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.
javascript - javascript:如何在函数本身中引用匿名函数?
如果“使用严格”中不允许 arguments.callee,我们不能这样做
因为在 IE 中不起作用(或者会“奇怪”地起作用)http://kangax.github.com/nfe/#jscript-bugs,那么我们还有哪些其他选项可以引用函数中的匿名函数本身?
r - attach() 函数内部
我想给一个函数提供一个 params 参数,然后附加它,这样我每次引用列表元素 a 时都可以使用 a 而不是 params$a。
这有问题吗?如果我定义了一个名为 c 的全局变量,并且还定义了列表 "params" 的一个名为 c 的元素,那么在附加命令之后将使用其值吗?
javascript - Javascript 范围问题:无法通过传递给函数的“this”obj 更改元素,但我可以使用速记方法
修改后的问题(原文见下文):
这是一个简单的 ajax 加载示例,在加载的内容中的元素上具有事件绑定:
soTest.htm
Ajax加载的内容,soTest2.htm:
那么为什么这不起作用:
但这确实:
++++++++++原始问题:++++++++++
我有一个表格,当单击特定表格标题(具有“排序”类的标题)时,我想对其进行排序。
例如:
为此,我有以下代码:
因此,在这些可排序列标题之一的单击事件中,我将整个“this”范围存储在 var 中以传递给该函数。
为了简化问题,我只想说我们正在尝试根据我正在使用的自定义 attr 'direction' 更改单击元素的背景颜色:
我假设我不了解 javascript 范围的某些方面(理解“this”对我来说非常难以捉摸)。
问题总结:
如果我将一个 var'd 'this' 范围传递给一个函数,为什么我不能更改 'this' 元素的各个方面,为什么我必须使用很长的方法来更改它们?
对我来说是一个棘手的问题,希望我做得足够好。
谢谢!
python - python noobie 范围问题
我写了这段代码:
尝试测试 python 是词法范围还是动态范围。我的想法是
应该打印 0 还是 1,这将告诉我 python 的作用域。但是,调用 y 会引发异常,指出 x 未定义。我对 Python 工作原理的理解似乎存在根本性的缺陷。
有人可以解释这是如何工作的吗?是的,我知道这可以很容易地使用对象来完成。我正在尝试探索在不使用对象的情况下赋予函数状态的想法。我这样写代码是因为上面翻译成像Scheme这样的词法范围语言肯定会起作用。
closures - javascript:如何使模块同时表现得像对象和函数?
我正在尝试为自己构建一个小助手库。首先,出于学习目的,然后我可以扩展它,以便在项目中派上用场。
我对原型引用、闭包和作用域有所了解。我还故意使用模块化模式来制作它,这样我toolbox
就不会污染全局命名空间。我也知道我们可以将原型分配给构造函数,因此构造的对象将保存这些方法。
下面是内容toolbox.js
并调用toolbox
:
但是像这样修改上面的代码:
将工作。
所以我的问题是为什么toolbox.prototype = {}
不这样做,而pick.prototype = {}
会pick
继承定义的方法?
我想同时实现这两个目标toolbox.tell("something");
,并且toolbox("div").raw();
不必直接将方法原型化到模块中。
请帮忙!我已经在谷歌上搜索了好几天来学习这些,现在我被困住了。非常感谢您的帮助!
更新
简而言之,jQuery 是如何做到这一点的:
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()
这里是空的?
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 日)
javascript - javascript变量作用域
为什么javascript允许在本地代码中创建全局变量?
一个例子
types - Ocaml中“type ...and”和“let ...and”之间的范围不一致
我想知道为什么在 OCaml 中,let ... and
没有与type ... and
.
以下是可以的,与以下内容t2
在同一范围内t1
:
以下是错误的,v2
不在范围内:
甚至let rec
不起作用:
type... and
为什么和之间的范围界定不一致 let...and
?
ruby-on-rails-3 - 在 rails3 中使用作用域进行 Eagerloading
我一直在尝试根据我的 rails3 应用程序中的某些范围急切加载关联,但找不到任何解决方案。
我的应用有以下型号:
在 projects#index 我有以下代码来获取用户的所有项目:
它获取用户的所有项目,以及预先加载关联。因此,当我执行以下循环以获取项目中的所有条目时,不会触发任何新查询。
由于这种急切的加载会获取所有条目,因此数据量比我实际需要的要多。所以我尝试对急切加载的条目应用一些条件,但找不到任何解决方案。我正在寻找类似的东西:
这样只有满足某些条件的条目才会被加载。
我们不能在急切加载中使用范围吗?请帮助我在范围界定的同时使用 eagerloading。