-
1:编程中的“同步、异步”的理解
同步:是指各语句执行结束的顺序与语句执行开始的顺序相同,做完一件事情才能做另一件事情
异步:是指各语句执行结束的顺序与语句执行开始的顺序并不一定相同,做一件事情,不影响做其它事情
2:event loop
上图中,主线程运行的时候,产生堆(heap)和栈(stack),栈中的代码调用各种外部API,它们在"任务队列"中加入各种事件(click,load,done)。只要栈中的代码执行完毕,主线程就会去读取"任务队列",依次执行那些事件所对应的回调函数。执行栈中的代码(同步任务),总是在读取"任务队列"(异步任务)之前执行。
1 (function() { 2 console.log('this is the start'); 3 (function(){ 4 console.log('222'); 5 })(); 6 setTimeout(function cb() { 7 console.log('this is a msg from call back'); 8 },1000); 9 10 console.log('this is just a message'); 11 12 setTimeout(function cb1() { 13 console.log('this is a msg from call back1'); 14 }, 0); 15 console.log('this is the end'); 16 })(); 17 // "this is the start" 18 // ”222“ 19 // "this is just a message" 20 // "this is the end" 21 // "this is a msg from call back1" 22 // "this is a msg from call back"
上面代码中的setTimeout方法是一个异步任务,意味着只有当前脚本的所有代码执行完,系统才会去读取"任务队列"。
3:网站打不开的原因及解决方法:
一、服务器/空间不稳定
和你选择的服务器或空间有关,打个比方,网站好比一个球,放在了一个摇摇晃晃的托盘上,用户想看看这个球可是抓不住又看不清。这时如果把球放在一个稳固的托盘上,把球稳稳拖住,流失的用户自然大大减少。
解决方案:
找个稳定的服务器很重要,至于靠谱的云主机怎么选,无外乎几点:
1、品牌(见仁见智,只是参考因素,不是选择标准),如果你真的没有这方面的经验,可以选择品牌有保证的
2、性价比,这个是最重要的,因为贵的不一定是好的,便宜的也不一定差。综合来说还是要看值不值
以上两点是选择的门槛,选择后可以还需要判断这家的产品稳定性、访问速度等方面的性能如何,需要结合实际情况作判定
推荐商家:
阿里云:品牌大,技术值得认可,但用户量很多,服务跟不上,同时价格有些贵
推荐指数:★★★★☆
小鸟云:新品牌,同样值得信赖,国内来说性价比很高
推荐指数:★★★★☆
华为云:主流服务商,“上不碰应用,下不碰数据”,客户服务也很好
推荐指数:★★★★☆
-
二、访问IP受限
IP被拒绝访问,或者用户与网站之间的通信异常
(注:这种情况只是其中一种,正常需要先判断网站是不是被攻击了,高峰期还是带宽不足等等情况导致的)
解决方案:
1、IP被限制了:换个ip访问;或者使用代理服务器伪装访问
2、通信异常:重启电脑,或者路由设备
-
三、本地DNS缓存
还有一种情况是由于域名重新解析后,本机访问域名还是指向原来的IP,这主要是因为本地DNS缓存导致的
解决方案:
更新DNS!可以选择电脑自动更新,需要时间,如果是有需求的可以手动清空缓存
具体步骤:
1、开始-运行-cmd
2、运行:ipconfig /displaydns,查看下本机已缓存的dns信息
3、运行:ipconfig /flushdns,清空DNS缓存
4:主流浏览器内核及CSS3中一些私有属性的css前缀
现代浏览器的内核,主流内容主要有(Firefox浏览器)、(熟悉的有Safari、Chrome等浏览器)、(Opera浏览器)、Trident(IE浏览器)。
根据不同的内核,一些私有属性的css前缀不一样
WebKit内核 css前缀 -webkit-
Mozilla内核 css前缀 -moz-
Trident内核 css前缀 -ms-
Opera 内核 css前缀 -o-
5:定义函数方法
1:函数声明
1 function functionName(arg0, arg1, arg2) { 2 // 函数体3 }
函数声明的一个重要作用就是函数声明提升,意思是在执行代码之前会想读取函数声明。这意味着可以把函数声明放在调用它的语句后面。
1 sayHi();2 function sayHi(){3 alert("Hi!");4 }
这例子不会报错,因为在代码执行之前会先读取函数声明。
2:函数表达式(第二种创建函数的方式),最常见的一种形式如下
var functionName = function(arg0, arg1, arg2){ //函数体 };
函数表达式与其他表达式一样,在使用前必须先赋值,否则报错:
1 sayHi(); //错误,函数还不存在2 var sayHi = function(){3 alert("Hi!");4 };
note:如下情况时要选用第二种。
1 //不要这样做2 if(condition){3 function sayHi(){4 alert("Hi!");5 }6 } else {7 function sayHi(){8 alert("Yo!");9 } }
1 //可以这样做 2 var sayHi; 3 if(condition){ 4 sayHi = function(){ 5 alert("Hi!"); 6 }; 7 } else { 8 sayHi = function(){ 9 alert("Yo!");10 };11 }
6:深拷贝与浅复制
1 //浅复制2 function extendCopy(p){3 var c = {};4 for(var i in p){5 c[i] = p[i]; 6 }7 c.uber = p ;8 return c ;9 }
1 //深拷贝 2 function deepCopy(p,c){ 3 var c = c || {}; 4 for(var i in p){ 5 if(typeof p[i] === 'object'){ 6 c[i] = (p[i].constructor === Array)? []:{}; 7 deepCopy(p[i],c[i]); 8 }else{ 9 c[i]=p[i];10 }11 }12 return c;13 }
7立即执行函数
1 (function(a){ 2 console.log(a); //firebug输出123,使用()运算符 3 })(123); 4 5 (function(a){ 6 console.log(a); //firebug输出1234,使用()运算符 7 }(1234)); 8 9 function sayhi(m){console.log(m)}("hi"); //不会执行10 !function sayhi(m){console.log(m)}("hi"); //立即执行,输出hi11 +function sayhi(m){console.log(m)}("hi"); //立即执行,输出hi12 ~function sayhi(m){console.log(m)}("hi"); //立即执行,输出hi13 var s=function sayhi(m){console.log(m)}('hi');//立即执行,输出hi
前面两种( function(){…} )()和( function (){…} () )是立即执行函数的常用写法;第九行是个匿名函数,并不会立即执行,因为js将其当成是函数定义;其后三个前面分别加了一些符号,js就会将其解析成表达式,就会立即执行。第四个是真正意义上的函数表达式,所以,会立即执行,输出结果。
8获取UA
1 function whatBrowser(){2 document.Browser.Name.value=navigator.appName;3 document.Browser.Version.value=navigator.appVersion;4 document.Browser.Code.value=navigator.appCodeName;5 document.Browser.Agent.value=navigator.userAgent;6 }
9样式优先级
!important > 行内style > id > class > tag (在同级样式按照申明的顺序后出现的具有更高的优先级)
10:Promise的实现
1 function getNumber(){ 2 var p = new Promise(function(resolve,reject){ 3 //做一些异步操作 4 setTimeout(function(){ 5 var num = Math.ceil(Math.random()*10);//生成一个1-10的随机数 6 if(num<=5){ 7 resolve(num); 8 }else{ 9 reject("数字太大了");10 }11 },2000);12 });13 return p;14 }15 getNumber()16 .then(function(data){17 console.log("resolved");18 console.log(data);19 console.log(somedata);//此处的somedata未定义20 })21 .catch(function(reason){22 console.log("rejected");23 console.log(reason);24 })
11:dom事件
HTML事件:
<input type="button" value="Click Me" οnclick="alert("Clicked")" />
在HTML中定义事件的处理程序可以包含要执行的具体操作,也可以调用在页面其他地方的脚本,如下
<script type="text/javascript">
function showMessage(){
alert("Hello world!");
}
</script>
<input type="button" value="Click Me" οnclick="showMessage()" />
DOM0级事件处理方式:
<p id="ppp">我们都是好孩子</p>
document.getElementById("ppp").οnclick=function(){
alert(1);}document.getElementById("ppp").οnclick=function(){ alert(2);}最后只弹出2,后1个把前面覆盖
DOM2级事件处理方式(可添加多个事件处理,而且可以是同一事件类型,不同效果叠加,先后执行):
document.getElementById("ppp").addEventListener("click",function(){
alert(1);})document.getElementById("ppp").addEventListener("click",function(){
alert(2);})不仅不会覆盖,点击后先后弹出1和2
12:HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
序号 方法 描述 1 GET 请求指定的页面信息,并返回实体主体。 2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 5 DELETE 请求服务器删除指定的页面。 6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 7 OPTIONS 允许客户端查看服务器的性能。 8 TRACE 回显服务器收到的请求,主要用于测试或诊断。