JS约瑟夫问题 循环链表还问题

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
url : 'AppTradeManageAction.asp?method=downLoadApp',
success : function(rsp, opt) {
var rspObj = Ext.decode(rsp.responseText);
if (rspObj.success) {
var resultJson = JSON.parse(rspObj.msg);
if(resultJson.endFlag=='1'){
showMsg(resultJson.msg,gridPanel);
queryAppAnother();
var fileName = resultJson.fileN
var session = resultJson.sessionId;
//解析返回值读取指令
var tabList = resultJson.tabL
//js for循环
function write()
if(i&tabList.length) setTimeout(function(){
&//设置dwr为同步提交& &&
DWREngine.setAsync(false);
&ICCardInfo.writeScriptMsg(function (value){
alert(value);
阅读(463)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'js for循环延时问题',
blogAbstract:'Ext.Ajax.request({\t\t\turl : \'AppTradeManageAction.asp?method=downLoadApp\',\t\t\tsuccess : function(rsp, opt) {\t\t\t\tvar rspObj = Ext.decode(rsp.responseText);\t\t\t\tif (rspObj.success) {\t\t\t\t\tvar resultJson = JSON.parse(rspObj.msg);',
blogTag:'',
blogUrl:'blog/static/6',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:5,
permalink:'blog/static/6',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}博客分类:
这是一个经典问题,只不过有一段时间不写纯js了,最近老是掉进以前跌过的坑,这次花了半天时间爬出来,所以记录一下。
昨天写js代码在给自定义的div注册onclick事件时发现得到的值始终是循环里的最后一个层里的值。
最早的代码:
for(var i in array){
var rowDiv = document.createElement("div");
rowDiv.innerText = array[i]["name"];
rowDiv.onclick = function(){//注册点击事件
pNode = this.parentN
pNode.previousSibling.value = this.innerT//将当前div的值赋给输入框
if(onclickCallback){//传入了回调函数则执行回调
onclickCallback(array[i]);
为了不干扰阅读的视线,将与这个问题无关的代码直接裁掉:
for(var i in array){
var rowDiv = document.createElement("div");
rowDiv.innerText =array[i];
rowDiv.onclick = function(){//注册点击事件
alert(array[i]);
这里发现点击一个div之后alert出来的始终是最后一次循环的值。这个现象立马想起来这是一个经典的闭包问题,在执行onclick的事件时会向外部函数寻找array[i]的定义,这里的i在for循环执行完之后变成了array[array.length-1]。
网上搜了一下,改进的方法有很多种:
方法1,外层包一个匿名函数,将每次循环的索引结果作为入参传入并自执行:
for(var i in array){
(function(obj){
var rowDiv = document.createElement("div");
rowDiv.innerText =
rowDiv.onclick = function(){//注册点击事件
alert(obj);
})(array[i]);
方法2,同样是利用闭包,给innerText赋值部分并没有问题,有问题的只是用到了闭包特性的onclick事件注册部分,所以就改onclick部分:
for(var i in array){
var rowDiv = document.createElement("div");
rowDiv.innerText = array[i];
rowDiv.onclick = (function(obj){//注册点击事件
return function(){
alert(obj);
})(array[i]);
方法3,以上解决翻案的语法看起来挺晦涩,但都是在闭包里打转,个人觉得能不用闭包的地方就尽量别用,一个不小心就会碰上内存泄漏的问题。下面给出另一种解法:
for(var i in array){
var rowDiv = document.createElement("div");
rowDiv.innerText = array[i];
rowDiv.obj = array[i];
rowDiv.onclick = function(){//注册点击事件
alert(this.obj);
这是我个人认为较好的方案,给dom对象添加自定义属性来保存值,在div的事件触发时可以通过this来引用。
浏览: 125330 次
来自: 南京
ZHENFENGSHISAN 写道赞
老弟,你这个问题应该是pring AOP代理不支持类内部方法调 ...
PS:这里的博客已经不更新了,新博客在简书:http://ww ...
小帅1127 写道确实难得得好文 就是不知道作者现在还从不从事 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'  JS使用if () { ... } else { ... }来进行条件判断。
  多个if else语句,如果第一个语句成立后面的语句就不会执行。
  switch case语句,首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。
  for循环
  for in 可以把一个对象的所有属性依次循环出来
  while和do while,do while和while的唯一区别是do while会至少执行一次。
本文已收录于以下专栏:
相关文章推荐
if 条件判断
score = 9.7
if score & 9.0 :
print 'Excellent.'
print 'Make persistent efforts.'...
ifage = 20
if age &= 18:
print 'your age is', age
print 'adult'
print 'END'结果your age is 20
* Copyright (c) 2016,烟台大学计算机与控制工程学院
* All rights reserved.
* 文件名:text.cpp
* 作者:常轩
* 微信公众号:Wo...
list和tuple/条件判断/循环/dict和set
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。
比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现:
程序不总是顺序执行的,所以需要条件控制语句来支持分支处理,循环来处理反复多次调用。下面将减少python中的条件判断和循环语法。
条件判断就是当某个条件为真时执行某个程序片段,否则执行另...
几乎所有的编程语言都必须有条件判断的功能,python当然不例外。如下例,根据python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,反之就什么都不做。也可以给if语句...
因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串'ABC'在Python内部都是ASCII编码的。Python提供了ord()和ch...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)javascript 使用for循环时该注意的问题-附问题总结
作者:HalfWater
字体:[ ] 类型:转载 时间:
所谓for循环就是重复的执行一段代码,for循环也是希望在创建循环时常会用到的工具,这篇内容主要给大家介绍javascript 使用for循环时该注意的问题-附问题总结,需要的朋友可以参考下
如果您希望一遍又一遍地运行相同的代码,并且每次的值都不同,那么使用循环是很方便的。
很多时候我们都用到for循环,而用到for循环部门往往对一个数组进行循环,其中我们很多时候都是这样写的:
// 次佳的循环
for (var i = 0; i & myarray. i++) {
// 使用myarray[i]做点什么
  这样的代码虽然没有什么大问题,但是每次循环都会获取一下数组的长度,这回降低你的代码,尤其当myarray不是数组,而是一个HTMLCollection对象的时候。
再看看下面的这个代码:
for (var i = 0, max = myarray. i & i++) {
// 使用myarray[i]做点什么
这样地代码只会获取一次数组的长度,提高了代码的质量;
伴随着单var形式,你可以把变量从循环中提出来,就像下面这样:
function looper() {
var i = 0,
myarray = [];
for (i = 0, max = myarray. i & i++) {
// 使用myarray[i]做点什么
javascript使用for循环时问题总结
这个问题的讨论最初来自公司内部邮件,我只是把这个问题的讨论内容记录下来。
有一些项目组在定位问题的时候发现,在使用“for(x in array)”这样的写法的时候,在IE浏览器下,x出现了非预期的值。
具体说,如果自定义了Array.prototype.indexOf方法(譬如源于某prototype污染),也许是因为老版本IE浏览器并不支持array.indexOf方法,而开发者又很想用,那么这样的浏览器可能会出现这样的问题:
Array.prototype.indexOf = function(){...};
var arr = [1, 2];
for (x in arr) console.log(x);
function(){…}
换句话说,把indexOf这个方法给输出出来了。
解决方法很简单,要么别添加这个方法,要么用“for (i=0; i & array. i++)”这样的循环等等。
但是问题的本质呢?有人猜测,可能是因为for(x in obj)这种用法其实是去遍历一个对象,而array的实现其实也和普通的object一致,只不过key是既定的数值而已:
{0:"something", 1:"something else"}
在一则stackoverflow的问答里面也提到了,遍历数组的时候用for…in和for(;;)的区别,前者的含义是枚举对象的属性,存在这样两个问题:
枚举的顺序无法被保证;
继承属性也被枚举出来;
在对Array.prototype.forEach的支持上,从这张表中也可以明确看到,IE8及以下版本是无法准确支持的:
这里还有对forEach方法兼容性的详细阐述。事实上,主要的JavaScript框架(比如jQuery、Underscore和Prototype等等)都有安全和通用的for-each功能实现。
在JSLint的for in章节里面也提到,for in语句允许循环遍历对象的属性名,但是也会遍历到那些通过原型链继承下来的属性,这在很多情况下都会造成预期以外的错误。有一种粗暴的解决办法:
for (name in object)
{ if (object.hasOwnProperty(name))
{ .... } }
还有人提到了使用for(var i=0;i&i++)类似这样的循环时的问题,因为JavaScript没有代码块级别的变量,所以这里的i的访问权限其实是所在的方法。有的书上会建议程序员把这样的变量声明放到一处去,但是从直观性上说,在大部分情况下都不够合理。
使用JavaScript 1.7中引入的“let”可以解决这个问题,使i成为真正的代码块级别的变量:
for(let i =0; i & a. i++)
最后,在Google的JavaScript风格导引里面,也涉及到了这个约束:
for-in loop:
Only for iterating over keys in an object/map/hash
以上就是本文关于javascript 使用for循环时该注意的问题-附问题总结的全部内容,希望对今后的工作学习有所帮助,同时欢迎各位业内人士提出批评建议。
更多的可以查看这篇文章:
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 思想僵化因循守旧问题 的文章

 

随机推荐