js补充:jquery对象转dom,this,闭包
juqery对象转成dom对象:
<form id="form">
</form>
js代码:
#jquery
$("#form")[0].reset() 等于 document.getElementById("form").reset()
#重置表单
this:
var name = "全栈28期"
function func(){
var name = "全栈25期"
console.log(name) // 全栈25
}
func();
var name = "全栈28期"
function func(){
var name = "全栈25期"
console.log(this.name) // 全栈28期
}
window.func();
var name = "王洋"
info = {
name:"陈硕",
func:function(){
console.log(this.name) // 陈硕
}
}
info.func()
var name = "王洋"
info = {
name:"陈硕",
func:function(){
console.log(this.name) // info.name > 陈硕
function test(){
console.log(this.name); // window.name > 王洋
}
test()
}
}
info.func()
var name = "王洋"
info = {
name:"陈硕",
func:function(){
var that = this;
function test(){
console.log(that.name); // info.name -> 陈硕
}
test()
}
}
info.func()
总结:每个函数都是一个作用域,在他的内部都会存在this,谁调用的函数,函数里面this就是谁。
闭包:
data_list = [11,22,33]
for(var i=0;i++;i<data.length){
console.log(i,data[i] )
}
data_list = [11,22,33]
for(var i=0;i++;i<data.length){
// 循环会发送三次ajax请求,由于ajax是异步请求,所以在发送请求时候不会等待。
$.ajax({
url:"....",
data:{value:data_list[i]},
success:function(res){
// 1分钟之后执行回调函数
}
})
}
console.log("全栈28期")#立即执行,然后去执行ajax中的回调函数
data_list = [11,22,33]
for(var i=0;i++;i<data.length){
// 循环会发送三次ajax请求,由于ajax是异步请求,所以在发送请求时候不会等待。
$.ajax({
url:"....",
data:{value:data_list[i]},
success:function(res){
// 1分钟之后执行回调函数
console.log(i); // 输出:2 2 2
}
})
}
console.log(i) // 输出:2,取最后的一次值i是2
data_list = [11, 22, 33];
for (var i = 0; i++; i < data.length) {
function xx(data) {
$.ajax({
url: "....",
data: {value: data_list[data]},
success: function (res) {
// 1分钟之后执行回调函数
console.log(data); // 输出:0/1/2
}
})
}
xx(i)
}
console.log(i) // 输出:2
data_list = [11, 22, 33];
for (var i = 0; i++; i < data.length) {
(function(data){
$.ajax({
url: "....",
data: {value: data_list[data]},
success: function (res) {
// 1分钟之后执行回调函数
console.log(data); // 输出:0/1/2,这样这里是用的原来的data的值
}
})
})(i)
}
console.log(i) // 输出:2
注意事项:如果你以后循环,循环内容发送异步请求,异步任务成功之后; 通过闭包来解决。
$.each(files,function()){} //这种默认是带着闭包的