jQuery for 循环 var 与 let 的区别是什么? 下面本篇文章给大家介绍一下. 有一定的参考价值, 有需要的朋友可以参考一下, 希望对大家有所帮助.
今天在写 jQuery 请求接口中发现一个问题:
在用 Ajax 发送请求中又嵌套了一个 Ajax 请求, 发现在内层请求的 success 中对第一次 success 中的循环变量 i 无法获取, 具体代码如下:
- $.Ajax({
- type: "get",
- url: "//////////////////////////",
- success: function (result) {
- rs = JSON.parse(result).data;
- for (var i = 0; i < rs.length; i++) { // 用 var 定义有问题
- var pos_ = ""
- $.Ajax({
- type: 'GET',
- async: false,
- dataType: 'jsonp',
- contentType: 'application/json; charset=utf-8',
- url: "///////////////////////////////////",
- success: function (result) {
- console.log(rs[i]) // 报错
- }
- })
- }
- }
- })
在第二次的 Ajax 请求后的回调函数中, rs[i] 是会报错的.
解决方案:
将 for 循环中声明变量 var i 更改为 let i
具体原因:
是第一次回调函数后的 for 循环中, 如果你再次发送请求, for 循环并不会停止, 即使你写了同步请求也不行.
但是如果你在声明 for 循环变量用 let 后, 代码会直到你请求完毕, 回调函数执行完毕后, 再进行下一次的循环.
这就考虑到了一个闭包的问题, 如果你写 var 和 let 声明的作用域不同.
let i 会以局部变量的形式传递
var i 会以全局变量的形式传递
如果要想将 i 变量传递给下一层, 要使用 let 去声明.
更多 web 前端 https://www.html.cn/ 知识, 请查阅 HTML 中文网 !!
来源: http://www.css88.com/qa/jquery/18246.html