this使用
每个函数都是一个作用域,在他的内部都会存在this,谁调用的函数,函数里面的this就是谁
调用的时候,函数前没有指定,就是使用window调用的–全局变量
var name = "QQQ"
function func(){
    var name = "WWW"
    console.log(name)   // WWW
}
func()
var name = "QQQ"
function func(){
    var name = "WWW"
    console.log(this.name)  // QQQ
}
var name = "QQQ"
info = {
    name: "WWW"
    func: function(){
        console.log(this.name)  // WWW
    }
}
info.func()
var name = "QQQ"
info = {
    name: "WWW",
    func: function(){
        console.log(this.name)  // info.name > WWW
        function test(){
            console.log(this.name); // window.name > QQQ
        }
        test()
    }
}
info.func()
var name = "QQQ"
info = {
    name: "WWW",
    func: function(){
        var that=this;
        function test(){
            console.log(that.name)  // info.name > WWW
        }
        test()
    }
}
info.func()
闭包
- 注意:
- 再循环中发送异步请求
- 异步任务成功之后,通过闭包获取每个ajax的返回值
 
data_list = [11, 22, 33]
// 循环
for (var i:i++; i<data.length){
    console.log(i, data[i])
};
data_list = [11, 22, 33]
for (var i:i++; i<data.length){
    // 循环会发送三次Ajax请求(1分钟)
    $.ajax({
        url: "xxx",
        data: {value: data_list[i]},
        success: function(res){
        }
    })
}
console.log("QWEQWE")   // 由于Ajax是异步请求,这里不会等待
data_list = [11, 22, 33]
for (var i:i++; i<data.length){
    // 循环会发送三次Ajax请求(1分钟)
    $.ajax(
        {
            url: "xxx",
            data: {value: data_list[i]},
            success: function(res){
                // 1分钟之后执行回调函数
                console.log(i)  // 这里输出的也是2
            }
        }
    )
}
console.log(i)  // 输出 > 2
data_list = [11, 22, 33]
for (var i:i++; i<data.length){
    function xx(data){
        // 循环会发送三次Ajax请求(1分钟)
        $.ajax(
            {
                url: "xxx",
                data: {value: data_list[i]},
                success: function(res){
                    // 1分钟之后执行回调函数
                    console.log(i)  // 输出 0-1-2
                }
            }
        )
    }
    xx(i)
}
console.log(i)  // 输出 > 2
for (var i:i++; i<data.length){
    // 使用自执行函数
    (
        function(data){
            $.ajax(
                {
                    url: "xxx",
                    data: {value: data_list[i]},
                    success: function(res){
                        // 1分钟之后执行回调函数
                        console.log(i)  // 输出 0-1-2
                    }
                }
            )
        }
    )(i)
}
$.each(data_list, function(index, value){
    console.log(value)
});
 
             
           
             
                         
             
            
评论区