javascript 怎样把闭包里处理得到值传到闭包外面,使闭包外面的变量af的值和闭包里af的值同步变化、相等?

ToSurpassTesla 2012-08-10 11:46:15
<!DOCTYPE HTML>
<html>
<head>
<title>Canvas </title>
<style type="text/css">
.thumb {
height: 75px;
border: 5px solid #000;
margin: 20px 10px 0 0;
}
</style>

</head>
<body>
<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>
<script>
var af = 2;//闭包外的af
document.getElementById('files').addEventListener('change', handleFileSelect, false);
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
reader.onload = function test(e) {
var df = 60;
var dataUri = event.target.result;
af = 10 + df + i; //闭包里的af
img = new Image();
img.src = dataUri;
document.body.appendChild(img);
alert(af);// 弹出闭包里af的值
}
reader.readAsDataURL(f);
}
alert(af); //弹出闭包外的af的值
}
</script>
</body>
</html>

怎样把闭包里处理得到值传到闭包外面,使闭包外面的变量af的值和闭包里af的值同步变化、相等??
...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ToSurpassTesla 2012-08-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
var testAf = this;
for (var i = 0, f; f = files[i]; i++) {
// Only process ……
[/Quote]
虽然不行,不过还是很谢谢你的帮助!!!!
ToSurpassTesla 2012-08-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

<!DOCTYPE HTML>
<html>
<head>
<title>Canvas </title>
<style type="text/css">
.thumb {
height: 75px;
border: 5px solid #000;
margin: 20px 10px 0 0;
}
</style>

</……
[/Quote]
很有道理,遇到困难,最聪明的方法就是绕过困难....谢谢
zhaozhenall 2012-08-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
var testAf = this;
for (var i = 0, f; f = files[i]; i++) {
// Only process ……
[/Quote]
学习下引用功能
IR_Chairman 2012-08-13
  • 打赏
  • 举报
回复
<!DOCTYPE HTML>
<html>
<head>
<title>Canvas </title>
<style type="text/css">
.thumb {
height: 75px;
border: 5px solid #000;
margin: 20px 10px 0 0;
}
</style>

</head>
<body>
<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>
<script>
var af = 2;//闭包外的af
document.getElementById('files').addEventListener('change', handleFileSelect, false);
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
// var reader = new FileReader();
var canvas = document.createElement("canvas");
var dataUri = canvas.toDataURL("image/png");
}
alert(af); //弹出闭包外的af的值
}
</script>
</body>
</html>
其实你可以用其它方法来把onload事件取代吧!这样会变得简单多了....
xd4005 2012-08-12
  • 打赏
  • 举报
回复
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
var testAf = this;
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
reader.onload = function test(e) {
var df = 60;
var dataUri = event.target.result;
// af = 10 + df + i; //闭包里的af
testAf.af = 10 + df + i;
img = new Image();
img.src = dataUri;
document.body.appendChild(img);
alert(testAf.af);// 弹出闭包里af的值
}
reader.readAsDataURL(f);
}
alert(af); //弹出闭包外的af的值
}
你试试看行不行
ToSurpassTesla 2012-08-11
  • 打赏
  • 举报
回复
大家能帮忙吱个声吗?等得很着急啊!!

87,992

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧