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)我一直在尝试为JavaScript中的动态创建的"a"标记的onclick事件分配一个函数.所有标记都在循环中创建,如下所示:
for ( var i = 0; i < 4; i++ )
{
var a = document.createElement( "a" );
a.onclick = function( ) { alert( i ) };
document.getElementById( "foo" ).appendChild( a );
}
Run Code Online (Sandbox Code Playgroud)
所有四个链接的警报值始终为"4".很明显.谷歌搜索时,我遇到了一个显示以下代码片段的帖子:
a.onclick = (function(p, d) {
return function(){ show_photo(p, d) }
})(path, description);
Run Code Online (Sandbox Code Playgroud)
我设法根据我的需要调整它并获得警报(i)正常工作的事情,但如果有人能够准确解释上述代码的作用,我将不胜感激.
javascript closures loops anonymous-function javascript-events
我希望下面的代码警告"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) 关于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) 我在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的最后一个值;
有没有办法/如何创建一个函数,参数是我在指定函数时的值...如果这有意义的话.