• 全部
  • 问答

请教高手,这函数没见过。怎么访问不了外部变量(包括全局变量)?

Information-is-Value 2021-01-10 01:09:20
<script>

// 原版函数,运行成功
watermark(['/img/forest.jpg', '/img/logo.png'])
.image(watermark.image.lowerRight(0.5))
.then(function (img) {
var pre = document.querySelector('#alpha-image pre');
pre.parentNode.insertBefore(img, pre);
});

// 欲修改成如下函数,函数内读取,改变外面的变量;
//问题是:watermark内不能访问变量,也不能alert(),但可以console.log().
var fistvar=11;
var secondvar=22;
watermark(['/img/forest.jpg', '/img/logo.png'])
.image(watermark.image.lowerRight(0.5))
firstvar=33;//问题一:此处压根错误?
.then(function (img) {
secondvar=44;//问题二:此处不能给外面定义的secondvar变量赋值?
var pre = document.querySelector('#alpha-image pre');
pre.parentNode.insertBefore(img, pre);
alert(secondvar.tostring());//问题三:这函数里不能alert
});
alert(fistvar.tostring());//值还是11
alert(secondvar.tostring());//值还是22
</script>
...全文
1642 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
学习在你的帮助下,我弄看懂了。 1、不怎么接触对象的方法链式调用 ,写成这格式有点像属性。 2、then()方法中函数确实是异步调用的。 3、我是准备循环调用这个异步函数,用for循环没成功,最后通过递归处理,我也分享出来吧。 再次表示感谢 <script> var theImgTags = document.getElementsByClassName("img-watermark-text"); if (theImgTags.length > 0) { var i=theImgTags.length-1; recursion(); function recursion(){ if (i<0){ return -1; } else{ var theImgTag = theImgTags[i]; var theImgTagSrc = theImgTag.src; console.log(theImgTagSrc); new watermark([theImgTagSrc]) .image(watermark.text.lowerRight('-WM-', '28px serif', '#ffffff', 0.5)) .then(function (img) { theImgTag.src = img.src; }); i--; return recursion(); } } </script>
回复
这个是对象的方法链式调用 watermark().image().then(); 他只是为了方便阅读,这样 watermark() .image() .then() 分行书写而已,不是单独的语句,中间不能插入firstvar=33;之类的其它语句。 then()方法中function (img) { }内的代码才是真正的函数体。 再就是,then()方法中函数应该是异步调用的。 异步调用的函数不会马上执行。而是让它后面的代码先执行。 等待浏览器一些工作(如:数据下载)处理完成,then()方法中的函数才执行。 对于你的代码也就是说then()方法后面的 alert(secondvar.toString()); 会先执行,弹出secondvar原本的值22 之后才执行then()方法中函数内的secondvar=44
回复
相关推荐
发帖
JavaScript
创建于2007-09-28

8.5w+

社区成员

Web 开发 JavaScript
申请成为版主
帖子事件
创建了帖子
2021-01-10 01:09
社区公告
暂无公告