写JS代码让自己头秃的点

写JS代码让自己头秃的点

主要还是自己没系统学习js的锅吧,记录一下。

匿名函数内用this

匿名函数中,this指代的是window对象,不是直观理解中的,局部this,这就会产生undefine的问题。
可以在匿名函数外使用另外的变量名表示。

var vm = this
var f = function () {
    vm.count = 1
}

匿名函数中赋值外部变量无效

本质上是因为js是异步执行,按照同步的思路写代码会造成误以为没有赋值成功的错觉,其实是赋值成功了的,只不过是在后面的代码执行之后,他才执行。
但是同步执行很多时候是必要的,可以使用Promise在实现,在then中确保能够同步执行。

首先来个栗子。

// from https://www.runoob.com/w3cnote/javascript-promise-object.html
function ajax(URL) {
    return new Promise(function (resolve, reject) {
        var req = new XMLHttpRequest(); 
        req.open('GET', URL, true);
        req.onload = function () {
        if (req.status === 200) { 
                resolve(req.responseText);
            } else {
                reject(new Error(req.statusText));
            } 
        };
        req.onerror = function () {
            reject(new Error(req.statusText));
        };
        req.send(); 
    });
}
var URL = "/try/ajax/testpromise.php"; 
ajax(URL).then(function onFulfilled(value){
    document.write('内容是:' + value); 
}).catch(function onRejected(error){
    document.write('错误:' + error); 
});

也可以使用async和await来写,这两个关键字学过python比较容易理解。可以理解为自动生成了Promise对象。

async download (url) {
    var flag = false
    await axios.get(url, {})
    	.then((res) => {
    	    flag = true
    	})
    	.catch((err) => {
    	    flag = false
    	})
    // await使得进程挂起,直到get请求执行完毕,最后再回来return
    return flag
}

var down = download('/abc.txt')
down.then((ret) => {
    // something to do
    console.log(ret)
}).catch((err) => {
	console.log(err)
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值