var funcs = [];
// let's create 3 functions
for (var i = 0; i < 3; i++) {
// and store them in funcs
funcs[i] = function() {
// each should log its value.
console.log("My value: " + i);
};
}
for (var j = 0; j < 3; j++) {
// and now let's run each one to see
funcs[j]();
}Run Code Online (Sandbox Code Playgroud)
它输出这个:
我的价值:3
我的价值:3
我的价值:3
而我希望它输出:
我的价值:0
我的价值:1
我的价值:2
使用事件侦听器导致运行函数的延迟时,会出现同样的问题:
var buttons = document.getElementsByTagName("button");
// let's create 3 …Run Code Online (Sandbox Code Playgroud)我希望下面的代码警告"0"和"1",但它会两次警告"2".我不明白原因.不知道这是不是jQuery的问题.另外,如果这些帖子的标题和标签不准确,请帮我编辑标题和标签.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
for (var i=0; i<2; i++) {
$.get('http://www.google.com/', function() {
alert(i);
});
}
});
</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我对节点很新,我正在尝试创建一些获取服务器信息的东西.但这是我的问题.我设置了一个配置对象(这将及时,由发生的事件动态更新),然后在函数中,我尝试访问该对象中的值.(见下面的代码)
首先,我设置我的变量:
var util = require('util'),
child = require('child_process'),
config = {};
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.然后我加载我的配置:
function loadConfig( )
{
// Add some code for auto-loading of args
config = {
"daemons": [
["Apache", "apache2"],
["MySQL", "mysqld"],
["SSH", "sshd"]
]
};
}
Run Code Online (Sandbox Code Playgroud)
并初始化调用该函数
loadConfig();
Run Code Online (Sandbox Code Playgroud)
之后,我对守护进程进行检查.
function getDaemonStatus( )
{
for(var i=0; i<config.daemons.length; i++)
{
child.exec( 'ps ax -o \'%c %P\' | awk \'{if (($2 == 1) && ($1 == "\'' +
config.daemons[i][1] + '\'")) print $0}\'',
function( error, stdout, stderr )
{
console.log(config.daemons[i]); …Run Code Online (Sandbox Code Playgroud) 如果我使用循环创建大量HTML元素,比如
for (i= 1; i < 100; i++) {
var my_element = document.createElement ("td");
row.appendChild (my_element);
my_element.onclick = function () {my_function (i));
}
Run Code Online (Sandbox Code Playgroud)
然后当单击该元素时,传递给的i的值my_function始终为100,无论调用它的是哪个数字元素.我通过使用解决了这个问题
my_element.id = "something"+i;
my_element.onclick = function (e) {my_function (e.target.id)};
Run Code Online (Sandbox Code Playgroud)
(对于Internet Explorer,显然target需要srcElement.)我很想知道是否有任何方法可以创建函数而无需像这样添加ID到元素.
关于stackoverflow的第一个问题:)希望我不会让自己难堪......
我有一个javascript函数,可以加载一个专辑列表,然后为每个专辑创建一个列表项.列表项应该是可点击的,所以我用一个做东西的函数调用jQuery的click().我循环这样做.我的问题是,所有项目似乎都获得相同的点击功能,即使我尝试创建一个在每次迭代中执行不同内容的新项目.另一种可能性是迭代变量以某种方式是全局的,并且函数引用它.代码如下.debug()只是Firebug的console.debug()的封装.
function processAlbumList(data, c) {
for (var album in data) {
var newAlbum = $('<li class="albumLoader">' + data[album].title + '</li>').clone();
var clickAlbum = function() {
debug("contents: " + album);
};
debug("Album: " + album + "/" + data[album].title);
$('.albumlist').append(newAlbum);
$(newAlbum).click(clickAlbum);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是上述函数运行时打印内容的记录,之后是单击不同项目导致的一些调试行.它总是打印"10",这是专辑变量的最后一个值(有10张专辑).
Album: 0/Live on radio.electro-music.com
Album: 1/Doodles
Album: 2/Misc Stuff
Album: 3/Drawer Collection
Album: 4/Misc Electronic Stuff
Album: 5/Odds & Ends
Album: 6/Tumbler
Album: 7/Bakelit 32
Album: 8/Film
Album: 9/Bakelit
Album: 10/Slow Zoom/Atomic Heart
contents: 10
contents: …Run Code Online (Sandbox Code Playgroud) 我有这个回调函数设置:
var contextMenu = [];
var context = [ { "name": "name1", "url": "url1" }, {"name": name2", "url: "url2" } ];
for(var i=0; i < context.length; i++) {
var c = context[i];
var arr = {};
arr[c.name] = function() { callback(c.url); }
contextMenu.push( arr );
}
function callback(url) {
alert(url);
}
Run Code Online (Sandbox Code Playgroud)
问题是传递给回调的url值始终是上下文变量中的最后一个值 - 在本例中为"url2".我期望将特定值传递给回调的每个"实例",但由于回调似乎记住了相同的值,因此最后一次引用它.
我有点卡住了.任何帮助,将不胜感激.
PS:我正在使用jQuery ContextMenu,根据我的理解,它不支持将自定义数据发送到其回调函数.正是在这种背景下,我遇到了这个问题.在这种环境下要克服的任何建议也很有帮助!
我在JS闭包时遇到问题:
// arg: an array of strings. each string is a mentioned user.
// fills in the list of mentioned users. Click on a mentioned user's name causes the page to load that user's info.
function fillInMentioned(mentions) {
var mentionList = document.getElementById("mention-list");
mentionList.innerHTML = "";
for (var i = 0; i < mentions.length; i++) {
var newAnchor = document.createElement("a");
// cause the page to load info for this screen name
newAnchor.onclick = function () { loadUsernameInfo(mentions[i]) };
// give this …Run Code Online (Sandbox Code Playgroud) 我不确定如何描述我想要的东西.我想定义一个函数,其参数是本地VALUE而不是引用.
说我有我想要创建的对象列表
for(i = 0; i < 10; i++){
var div = document.createElement("div");
div.onclick = function(){alert(i);};
document.appendChild(div);
}
Run Code Online (Sandbox Code Playgroud)
现在我相信这个例子,无论我点击什么div,它都会提醒"10"; 因为那是变量i的最后一个值;
有没有办法/如何创建一个函数,参数是我在指定函数时的值...如果这有意义的话.
如果我以错误的角度来到这个街区,请告诉我.我有一系列功能,我想要启动,我希望能够将它们全部设置为循环.
for(var jj = 0; jj<monster.frames.length;jj++){
setTimeout(
functionName(jj),
1000*jj
);
}
Run Code Online (Sandbox Code Playgroud)
问题在于,当它functionName(jj)被执行时,它被传递的值在jj此时已被更改为最后一个循环迭代值.