jquery和javascript代码混合使用时取不到变量的问题 本帖最后由 banuiss 于 2011-07-22 15:54:03 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for (var i = 0; i < 6; i++) { lan = nowurl.match(urls[i]); if (lan != null){ $("#langu").click((function(n){ return function(){ alert(n); } })(lan)); }} for循环时 和 click触发时 是不同的两个时间。 循环中的产生的变量i 在click时已经不存在了。所以要通过全局变量或者闭包的形式把具体的值保存下来。 for循环作用域问题,楼上正解以下程序会alert什么? var arr = []; for(var i=0; i< 2;i++){ var fn = function(){ alert(i) } arr.push(fn); } for(var j in arr){ var fn = arr[j]; fn(); } var arr = []; for(var i=0; i< 2;i++){ var fn = function(){ alert(i) } arr.push(fn); } for(var j in arr){ var fn = arr[j]; fn(); } 答案是 2 , 2其实理应让其alert 0,1才对这是因为第一个for循环里面创建函数fn的时候里面的i始终是在同一个作用域这样当循环2次后,又执行了一次i++,这时i等于2了. 因为是同一作用域,因此函数里面的i都是2要解决此问题,只需要创建一个闭包来实现就可以了,修改第一个for循环:var arr = []; for(var i=0; i< 2;i++){ (function(j){ var fn = function(){ alert(j) } arr.push(fn); }(i)); // 创建一个匿名函数并立即执行,传入参数i } for(var j in arr){ var fn = arr[j]; fn(); } var arr = []; for(var i=0; i< 2;i++){ (function(j){ var fn = function(){ alert(j) } arr.push(fn); }(i)); // 创建一个匿名函数并立即执行,传入参数i } for(var j in arr){ var fn = arr[j]; fn(); } 这样就打印 0 1 了.因为闭包里面的参数j跟i不是在同一作用域 紧急!有10条规则,可以任意制定,比如如果第2条到第5条有1条不符合 压缩过的javascript如何调试 怎么在Eclips上测试JS程序 js replace \x,\t的问题 javascript对于这样的问题怎样去判断? 关于split截取路径问题 求一广告js代码?(象sohu,在网页的两侧,滚动条移动时,广告跟随移动) <!--注释--> 有什么函数是可以格式化一个数,使得这个数只有二位小数 求教google经纬度转百度经纬度 基本数据类型的问题 求助 我要用Jstree做树形菜单,那么该如何获取数据源呢?
for (var i = 0; i < 6; i++) {
lan = nowurl.match(urls[i]);
if (lan != null){
$("#langu").click((function(n){
return function(){
alert(n);
}
})(lan));
}
}
所以要通过全局变量或者闭包的形式把具体的值保存下来。
var arr = [];
for(var i=0; i< 2;i++){
var fn = function(){
alert(i)
}
arr.push(fn);
}
for(var j in arr){
var fn = arr[j];
fn();
}
var arr = [];
for(var i=0; i< 2;i++){
var fn = function(){
alert(i)
}
arr.push(fn);
} for(var j in arr){
var fn = arr[j];
fn();
}
答案是 2 , 2其实理应让其alert 0,1才对这是因为第一个for循环里面创建函数fn的时候里面的i始终是在同一个作用域
这样当循环2次后,又执行了一次i++,这时i等于2了. 因为是同一作用域,因此函数里面的i都是2
要解决此问题,只需要创建一个闭包来实现就可以了,修改第一个for循环:var arr = [];
for(var i=0; i< 2;i++){
(function(j){
var fn = function(){
alert(j)
}
arr.push(fn);
}(i)); // 创建一个匿名函数并立即执行,传入参数i
}
for(var j in arr){
var fn = arr[j];
fn();
}
var arr = []; for(var i=0; i< 2;i++){
(function(j){
var fn = function(){
alert(j)
}
arr.push(fn);
}(i)); // 创建一个匿名函数并立即执行,传入参数i
} for(var j in arr){
var fn = arr[j];
fn();
} 这样就打印 0 1 了.因为闭包里面的参数j跟i不是在同一作用域