var int1 = 100;
var int2 = 100;
console.log( int1 == int2 );
function fun1(){
return 100;
}
function fun2(){
return 100;
}
// 当前 比较的是 函数名称 fun1 中存储的内容 和 函数名称 fun2中存储的内容
// 不是 比较 fun1 和 fun2 函数的执行结果
console.log( fun1 == fun2 );//false
// 如果输出查看函数名称
// 虽然不能看到内存地址,但是我们可以看到,内存地址中,存储的字符串形式的函数程序
// 看不到内存地址的原因是,浏览器会自动根据内存地址,找到对应的存储空间,显示其中存储的内容
console.log( fun1 );
// 有()是在调用函数,没有()是函数的名称
// 这里是比较两个函数的返回值
console.log( fun1() == fun2() );//true
// 函数的定义和函数的存储
// 函数的定义封装阶段,程序的执行过程
// 1,不管函数还是变量,都是存储在内存之中的
// 会先在内存中,开辟一个存储空间,来准备存储函数
// 并且 操作系统 会给 这个存储空间 定义一个 内存地址
// 2,将函数定好的内容,存储在这个内存空间中
// 此时 函数的程序 内容 是以 类似于 字符串的形式来存储
// 此时 并没有执行 函数的程序 , 只是以字符串的形式存储在内存空间中
// 3,将 内存空间的 内存地址 赋值给 函数名称(声明式) / 变量(匿名函数/赋值式) 进行存储
// 实际上 函数名称 / 变量 中 实际存储的是 内存地址
// 函数的调用和执行
// 1,读取 函数名称 / 变量 中 存储的内存地址
// 2,通过 内存地址,找到存储变量的内存空间,获取对应的函数程序
// 3,给函数中的参数,进行赋值
// 4,执行函数 的 预解析 / 预解释
// 5,执行函数中存储的代码程序
在 内存 中 操作系统将内存分成了两个部分, 堆 和 栈
堆和栈的作用不同,存储不同的数据类型
栈 存储基本数据类型 布尔类型 数值类型 字符串类型 undefined null
堆 存储引用数据类型 函数 数组 对象
栈 是 以 有序的方式 存储数据
先定义变量,会存储在栈的最下方
存储 基本数据类型 变量中 存储的就是 数据数值
堆 是 以 无序的方式 存储数据
函数等,数值数值 存储在 堆 中
变量名称 / 函数名称 存储在 栈 中
变量名称 / 函数名称 中存储的是 堆 行中 内存空间的内存地址
总结:
基本数据类型比较,比较的是 存储的数值数据
引用数据类型比较,比较的是 存储的内地地址
基本数据类型,赋值,赋值的是 存储的数据数值
引用数据类型,赋值,赋值的是 存储的内存地址
即时两个应用数据类型,数据内容都完全一致
因为存储的内存空间不同,变量名称/函数名称 中存储的内存地址也不同
两个引用数据类型,比较判断,一定是 不等 的