上海有名的网站建设公司网站备案幕布 下载
1.1 栈内存和堆内存
我们知道程序是需要加载到内存中来执行的,我们可以将内存划分为两个区域:栈内存和堆内存
- 原始类型占据的空间是在栈内存中分配的
 - 对象类型占据的空间是在堆内存中分配的
 
1.1.1 值类型和引用类型
原始类型的保存方式:在变量中保存的是值本身
- 所以原始类型也被称之为是值类型
 
对象类型的保存方式:在变量中保存的是对象的“引用”
- 所以对象类型也被称之为引用类型
 
1.1.2 JavaScript中的一些现象
- 现象一:两个对象的比较
 
  var num1=123var num2=123console.log(num1===num2)//true//1.现象一:两个对象的比较var obj1 = {}var obj2 = {}console.log(obj1===obj2) //false 

现象二:
//现象二:引用赋值
 //现象二:引用赋值var info = {name:"why",friend:{name:"kobe"}}var friend = info.friendfriend.name="jams"console.log(info.friend.name) //jams
 
现象三:值值传递
  //3.现象三:值传递function foo(a) {a=200}var num=100foo(num)console.log(num)//100
 

 //现象四:引用传递function foo(a){a = {name : "why"}}var obj = {name:"obj"}foo(obj)console.log(obj)//打印的是obj的
 

5.现象五:引用传递,但是在函数中创建了一个新对象,没有对传入的对象进行修改
 //5.现象五:引用传递,但是对传入的对象进行修改function foo(a) {a.name = "why"}var obj = {name: "obj"}foo(obj) console.log(obj)//why
 

2.1 函数中的this指向的两种情况
2.1.1 为什么需要this
在常见的编程语言中,几乎都有this这个关键字(Objective-C中使用的是self),但是JavaScript中的this和常见的面向对象语言中的this不太一样
- 常见面向对象的编程语言中,比如C++,java,Swift,Dart等等一系列语言中,this通常只会出现在类的方法中
 - 也许你就是一个类,类中的方法(特别是实例方法)中,this代表的就是当前调用对象
 
代码示例
 var info = {//对象是一种数据结构name:"why",running:function(name) {console.log("running~",this.name)//先看一下自己的作用域找有没有name,没有就去WIndow对象里面找},eating: function(name) {console.log("eating~",this.name)//封装的比较独立,不会因为外部条件的改变而受到影响},studying:function(name) {console.log("studying~",this.name)}}info.eating()info.running()info.studying()
 
2.1.3 this指向什么呢?
目前掌握两个this的判断方法:
- 在全局环境下面,以默认的方式调用用一个函数,this指向WIndow
 - 通过对象调用,this指向调用的对象
 
function foo() {console.log(this)//window
}
 
var obj = {bar:function() {console.log(this)//obj}
}
obj.bar()
