内存数据变量&&回调函数&&IIFE匿名函数

内存&&变量&&数据

内存

内存分类

​ 栈:全局变量/局部变量(函数名在栈空间

​ 堆:对象(函数本身在堆空间

小内存的两个数据

​ 内部储存的数据and地址值

var obj = {name:"Jack"};
var a = obj;

数据

数据的特点:可传递,可运算

内存中所有操作的目标:数据(算术运算 逻辑运算 赋值 运行函数)

变量

​ 可变化的量,变量名和变量值组成

​ 每个变量对应一小块内存,变量名用来查找对应的内存,变量值就是内存中对应的数据

三者之间的关系

内存是用来存储数据的空间;

变量是内存的标识

相关问题

  1. 赋值和内存问题:var a = xx ,a保存的是什么?

    | xx是基本数据,保存的就是数据

    | xx是对象,保存的是对象的地址

    | xx是变量,保存的是内存内容(数据or地址)

  2. 引用变量和赋值问题

    |多个引用变量指向同一个对象,一个变量修改对象内部数据,另外的变量访问的也是修改后的数据

    //这里其实有三个引用变量指向同一个对象 obj1 obj2还有obj(形参)修改其中一个另外的也会被修改
    var obj1 = {name:"Tom"}
    var obj2 = obj1
    obj2.age = 18
    console.log(obj1.age)  //18
    function fn(obj){
        obj.name = Jack
        // 注意!!!  obj = {name:"Jack"}  若改为此种写法 -> 则输出为Tom  因为相当于赋值了一个新的对象,obj指向了新的地址(本来是obj1的地址),函数执行完变成了垃圾数据被释放,obj1还是指向原来的对象
    }
    fn(obj1)
    console.log(obj2.name)  //Jack
    

    |2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个变量

    var a = {age:12}
    var b = a
    a = {name:'BOB',age:13}  //a指向新的变量
    console.log(b.age,a.name,a.age)//12 BOB 13
    

    对象&&回调函数

    对象

    ​ |多个函数的封装体,用来保存多个数据的容器

    ​ |对象可以更方便我们统一管理多个数据

    回调函数

    ​ |回调函数的概念:是自己定义的 ,没有调用但执行了

    ​ |常见回调函数:ajax请求回调函数 生命周期回调函数(暂时还没理解,正在看)

    ​ |回调函数:使用callback&&callback() 传递参数时,传或者不传回调函数都可以

    <button id = "btn">测试点击事件</button>
    
    <script type = text/javascript>
        document.getElementById('btn').onclick = function(){//dom事件回调函数
        alert(this.innerHTML)
    }
    
    setTimeout(function(){//定时器回调函数
        alert("时间到了")
    }2000)
    </script>
    

IIFE(匿名函数)

定义

​ 立即调用的函数表达式,也就是说,声明函数的同时立即调用这个函数

(functionlike(){
  var a=10;
  console.log(a);
})();

作用

​ |隐藏实现,不会污染全局命名空间

​ | JS只有全局作用域、函数作用域,只有function才能实现作用域隔离,如果要将一段代码中的变量、函数等的定义隔离出来,只能将这段代码封装到一个函数中。虽然大部分的函数封装都是为了复用,但也有只使用一次的函数 -> 为了隔离作用域。既然只使用一次,那么就可以立即执行并且省略函数的名字 -> IIFE

(function(){
        var a=1
        function test(){
            console.log(++a)
        }
        function test2(){ //被隐藏没有向外暴露,不可调用
            console.log(++a)
        }
        window.b = function(){  //向外暴露test这个函数
            return{
                test:test
            }
        }
    })()

	b().test() // b是一个函数,执行后返回一个对象
	//以下三种方式都会报错
    text()
    text2()
    b().text2()

this对象

|以函数形式调用时,this指向window

|以方法形式调用时,this就是调用方法的那个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值