javascript中的神器——Promise

javascript中的神器——Promise

什么是Promise?

啥也不说了直接在控制台上打印出来
> console.dir(Promise)
  function Promise()
    all:function all()
    argument:(...)
    call:(...)
    length:1
    name:"Promise"
 ☟prototype:Promise
    catch:function catch()
    constructor:function Promise()
    then:function then()
    Symbol(Symbol.toStringTag):"Promise"
    __proto__:Object

闭包的理解(借鉴阮一峰的文章)

  • 我认为要想知道什么是闭包,那就要先知道什么是变量的作用域!

作用域

- 全局变量
    
1
2
3
4
5
6
var m = 123 //这样在全局定义的就是全局变量
- 局部变量
```javascript
function foo() {
var m = 123; //这样在函数内部定义的变量就是局部变量,函数外部无法直接读取的
}

call、apply 和 bind 的区别

call、apply 和 bind 的区别

  1. 不传递参数的情况
    function foo(a,b,c){

    console.log(typeof this);
    console.log(a,b,c)
    

    }

    console.log(‘============call()============’)
    console.log(foo.call())
    console.log(‘============call()============’)
    call 会让函数执行

    console.log(‘============apply()============’)
    console.log(foo.apply())
    console.log(‘============apply()============’)
    apply 会让函数执行

    console.log(‘============bind()============’)
    console.log(foo.bind())
    console.log(‘============bind()============’)
    bind 不会执行这个函数,会复制函数

mvc 和 mvvm 的区别

最近身边有朋友对于MVC和MVVM有点疑问。我来写下我的理解

MVC

模式的意思是分三个部分的

  • 视图(View):用户界面
  • 控制器(Controller):业务逻辑
  • 模型(Model):数据保存

各部分之间的通信方式如下

通信方式

1. View 传送指令到 Controller

2. Controller 完成业务逻辑后,要求 Model 改变状态

3. Model 将新的数据发送到 View,用户得到反馈

跨域问题

什么是跨域

概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。

URL 说明 是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夹 允许
http://www.a.com:8000/a.js
http://www.a.com/b.js 同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许

js兼容性问题

javascript的兼容性问题处理(借鉴来的,这篇文章的网上也可以查到)

文章原网址:http://www.jb51.net/article/21483.htm

一、document.formName.item(”itemName”) 问题

问题说明:IE下,可以使用 document.formName.item(”itemName”) 或 document.formName.elements [“elementName”];Firefox 下,只能使用document.formName.elements[“elementName”]。
解决方法:统一使用document.formName.elements[“elementName”]。

二、集合类对象问题

问题说明:IE下,可以使用()和[]获取集合类对象;Firefox下,只能使用[]获取集合类对象。
解决方法:统一使用[]获取集合类对象

三、自定义属性问题

问题说明:IE下,可以使用获取常规属性的方法来获取自定义属性,也可以使用 getAttribute() 获取自定义属性;Firefox下,只能使用 getAttribute() 获取自定义属性。
解决方法:统一通过 getAttribute() 获取自定义属性。

ajax数据交互

概念

我记得W3C是这么说的:AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。(其实我更喜欢使用angular中的SPA来做这个。)

什么是同步交互

比如我们用户登录,我们输入用户名,密码之后,点击登陆发送一个请求给服务器,服务器接收到请求之后,会对请求进行处理,这个处理需要一个过程,在处理的过程当中,客户端一直处于等待的状态,如果服务器处理完毕,将处理结果返回给浏览器(一般返回的是一个页面),返回的结果会把之前的登陆页面直接覆盖掉,我们说这种交互方式,就是同步的交互方式。

什么是异步交互

比如我们用户注册,当我们输入用户名之后,随着界面会给我们提示,该用户名是否存在,在这样的一个过程当中,我们实际上是已经跟服务器进行交互了的,否则怎么会提示该用户已经存在了勒。我们可以这么理解异步交互,与同步进行一个对比,异步交互时,当发送一个请求,服务器接收到请求之后,对请求进行处理,在处理的过程当中,用户还可以做其它的事情,当服务器处理请求完成之后,会给客户端一个响应,响应的数据不会覆盖原来的页面,这样我们就能给用户一个完好的用户体验,这个就是我们说的:页面不刷新,就可以能够与服务器进行动态的数据交互。在我们显示的开发过程当中,有很多这样的实际案例。

ajax

jquery中prop()方法和attr()方法的区别

基本使用方法

attr()的使用获取匹配的第一元素的一个属性值,或者是为所有匹配的元素进行属性赋值。

支持的方法:
.attr(attributeName)

- 获取匹配到的第一个元素的一个属性值
- 输入值attributeName
- Type:String,需要获取的属性名称

.attr()方法,只能获取匹配到的第一个元素的值,如果你想要获取匹配到的所有的元素的属性值,那么就需要借助jquery中的循环的方法,比如:.each()和.map();
使用jQuery的.attr()方法,获取元素的属性值有两个最重要的优势:

  • 使用简单,它可以直接对一个jQuery对象使用,并且使用过之后可以继续使用其他的jQuery方法。

  • 跨浏览器兼容性,有些属性的获取方法在浏览器上不兼容的,甚至于有的在同一浏览器的不同版本之间,都会出现不兼容的问题,.attr()方法降低了这种不兼容性。

注:属性值是一个通常会返回一个字符串,偶尔也会返回类似价值或者数字顺序的值。

,