Javascript 为什么此代码中的console.log返回未定义? var el=$('.container'); var anchors=新数组('jobs'、'portfolio'、'docs'、'interier'、'price'); 对于(var i=0;i
当您单击该元素时,Javascript 为什么此代码中的console.log返回未定义? var el=$('.container'); var anchors=新数组('jobs'、'portfolio'、'docs'、'interier'、'price'); 对于(var i=0;i,javascript,jquery,arrays,for-loop,Javascript,Jquery,Arrays,For Loop,当您单击该元素时,i将增加到锚定.长度的值 您的单击处理程序引用了i JavaScript中未解析的属性查找返回未定义的 使用此作为元素的引用会容易得多。否则,请找到按值传递i值的方法,而不是直接引用它。当您单击该元素时,i将增加到锚点的值。长度 您的单击处理程序引用了i JavaScript中未解析的属性查找返回未定义的 使用此作为元素的引用会容易得多。否则,请找到按值传递i值的方法,而不是直接引用该值。未定义的原因是i实际上等于5。看看这个: var el = $('.container')
i
将增加到锚定.长度的值
您的单击处理程序引用了i
JavaScript中未解析的属性查找返回未定义的
使用此
作为元素的引用会容易得多。否则,请找到按值传递i
值的方法,而不是直接引用它。当您单击该元素时,i
将增加到锚点的值。长度
您的单击处理程序引用了i
JavaScript中未解析的属性查找返回未定义的
使用此
作为元素的引用会容易得多。否则,请找到按值传递i
值的方法,而不是直接引用该值。未定义的原因是i
实际上等于5
。看看这个:
var el = $('.container');
var anchors = new Array('jobs', 'portfolio', 'docs', 'interier', 'price');
for (var i = 0; i < anchors.length; i++) {
el.on('click', 'a[href$="#'+anchors[i]+'"]', function (e) {
e.preventDefault();
console.log(anchors[i]);
$.scrollTo('a[name="'+anchors[i]+'"]');
});
};
简单地说,for循环的i++
在真值测试部分i<5
位之后执行。因此,当i
等于4
时,循环将运行,然后它将递增i++
,这将i
的值设置为5,从而使真值测试失败
既然您知道i
等于5
,那么当您在锚定
数组中进行查找时,锚定[5]
是未定义的
这一点很重要,因为每次触发click事件时,它都会执行i
的缓存值,即5,反过来,您将始终记录未定义的日志
为了解决这个问题,我们可以像这样为i
的值创建一个别名
for ( var i = 0; i < 5; i++ ) {
console.log( i );
}
console.log( i ) // Logs out 5;
var el=$('.container');
var anchors=新数组('jobs'、'portfolio'、'docs'、'interier'、'price');
对于(var i=0;i
未定义的原因是i
实际上等于5
。看看这个:
var el = $('.container');
var anchors = new Array('jobs', 'portfolio', 'docs', 'interier', 'price');
for (var i = 0; i < anchors.length; i++) {
el.on('click', 'a[href$="#'+anchors[i]+'"]', function (e) {
e.preventDefault();
console.log(anchors[i]);
$.scrollTo('a[name="'+anchors[i]+'"]');
});
};
简单地说,for循环的i++
在真值测试部分i<5
位之后执行。因此,当i
等于4
时,循环将运行,然后它将递增i++
,这将i
的值设置为5,从而使真值测试失败
既然您知道i
等于5
,那么当您在锚定
数组中进行查找时,锚定[5]
是未定义的
这一点很重要,因为每次触发click事件时,它都会执行i
的缓存值,即5,反过来,您将始终记录未定义的日志
为了解决这个问题,我们可以像这样为i
的值创建一个别名
for ( var i = 0; i < 5; i++ ) {
console.log( i );
}
console.log( i ) // Logs out 5;
var el=$('.container');
var anchors=新数组('jobs'、'portfolio'、'docs'、'interier'、'price');
对于(var i=0;i
变量i
获得了最后一个循环的值。如果要访问定位点,可以使用以下选项:
var el = $('.container');
var anchors = new Array('jobs', 'portfolio', 'docs', 'interier', 'price');
for (var i = 0; i < anchors.length; i++) {
// By passing the value to this self executing function,
// it creates a new instance of the variable
( function ( index ) {
el.on('click', 'a[href$="#'+anchors[index]+'"]', function (e) {
e.preventDefault();
console.log(anchors[index]);
$.scrollTo('a[name="'+anchors[index]+'"]');
});
})( i );
};
变量i
获得了最后一个循环的值。如果要访问定位点,可以使用以下选项:
var el = $('.container');
var anchors = new Array('jobs', 'portfolio', 'docs', 'interier', 'price');
for (var i = 0; i < anchors.length; i++) {
// By passing the value to this self executing function,
// it creates a new instance of the variable
( function ( index ) {
el.on('click', 'a[href$="#'+anchors[index]+'"]', function (e) {
e.preventDefault();
console.log(anchors[index]);
$.scrollTo('a[name="'+anchors[index]+'"]');
});
})( i );
};
有点离题:初始化数组如var锚=['a','b','c']应该是快速的,可能是错误作用域的重复,我没有在那里定义。有点离题:初始化数组如var锚=['a','b','c']应该是快速的,可能是错误作用域的重复,我没有在那里定义。