泻药
不想直接给你答案
你可以试试写个内容如下的a.js
alert('a')
然后
var scn = document.createElement('script');
scn.src = 'a.js';
document.getElementsByTagName('head').appendChild(scn);
alert('b');
看看执行顺序是先a后b
还时先b后a
就知道是同步异步
你还可以在以上代码中加入
async 来看看是否造成差异
如果你认为AJAX是异步的,那么JSONP就也是异步的。 这里的异步描述的是与服务器通讯的过程。
script的同步是相对于浏览器解析HTML Document的,而不是JS的。
异步的,无论script标签产生网络请求到script执行,还是jsonp的回调函数的执行都是异步的,非阻塞的。并没有歧义。
你所考虑的场景可能是eval这种,往dom上放一个script标签,并且里面包含执行一个回调函数的代码,那么这个在一定意义上可以考虑是同步的。(然而实际上这还是异步
谢邀。
我觉得题主要先搞清楚,在软件开发领域,在前端领域,同步和异步的概念分别是什么。
我在wikipedia上找到一个解释。其实可以简单的理解为:能立刻得到结果的,不影响代码顺序执行的,都是同步的。反之,都是异步的。
alert, confirm, prompt都需要较长时间执行,但它们并不影响代码顺序执行,所以,它们是同步的。
setTimeout, setInterval, ajax等网络请求方式,这些都是需要回调函数的,不能立刻得到结果,而且也不阻塞代码顺序执行,所以这些都是异步的。
再来看什么是jsonp:
jsonp可以理解为从网络加载的一段脚本,不是表达式,而是语句。通常的表现形式为,在请求的URL中传入一个要执行的函数的方法名,而在应答中调用这个方法。
所以,jsonp是异步的,并且是可以跨域请求的异步。
如果不在script tag里指定async,就默认是同步加载的,就像通常的JS请求。
请看
的回答,更全面。
其实把 jsonp 当成正常的 http 请求就好理解了。请求本身并没有同步异步的区别
长知识了 以前真没有深究过这个点
标签:JSONP,严格来说