作用域、初识函数(ECMAScript)、包装对象、数据的存储

文章详细阐述了JavaScript中的作用域概念,包括全局作用域和局部作用域,并介绍了函数的创建和调用。同时,讨论了原始类型的包装对象以及原始类型数据和引用数据类型的存储差异。通过示例解释了变量在不同作用域中的行为,以及如何通过function关键字定义和调用函数。最后,提到了对象和数据类型的存储机制,包括栈和堆的概念。
摘要由CSDN通过智能技术生成

一、作用域

作用域:程序源代码定义的某个变量的区域

    1.全局作用域:就是最外层的一个执行环境,在web浏览器中,就认为这个全局作用域是window对象

        在全局声明的变量或者函数会作为window的属性和方法

        全局中的变量、函数,具有全局作用域(在任何地方都可以调用)

        全局变量或函数是直到退出应用或关闭网页才会被销毁

                var a=1;
                console.log(window);

    2.局部作用域(函数作用域)

        在函数的内部使用

        在函数调用完毕的时候,其中的变量被销毁

        函数内部可以使用全局变量,全局的变量(函数)不能使用(其他函数)内部变量

     function fn() {
                    var c=999;
                    console.log(c);//999
                }
                console.log(c);//undefined
                //c在函数中声明的,是局部变量,只能在函数中作用,在其他地方不作用

二、函数的创建和调用

使用function创建函数

创建函数语法:function 函数名(参数){代码块}

调用函数语法:函数名();

        // 函数的创建
        function fn(){//fn是函数名
            console.log("1111");
        }
        // 调用函数
        fn();//函数名()

        //对象中的函数
        var zww={
            fn:function(){
                console.log("222");
            }
        }
        console.log(zww.fn);//打印函数
        zww.fn();//调用对象中的函数

三、包装对象

对象是JavaScript中的主要类型,有三种原始类型的值:number string Boolean,他们在一定的条件下可以自动转化为对象,也就是原始类型的包装对象。

只要引用了这三种原始类型值的属性或方法,js就会自动通过以上方法包装成对象,并且这个包装成的对象是临时的,一旦属性引用结束,则新创建的的对象就会被销毁。

注意:undefined和null不能被包装成对象(所以undefined和null不能使用toString

举例1:

       var str="123";
       var strobj=new String(str);//将字符串包装成对象
       console.log(strobj);
       console.log(strobj[2]);

       var aa=123;
       var numobj=new Number(aa);//将数字包装成对象
       console.log(numobj);

       var bool=true;
       var boolobj=new Boolean(bool);//将布尔值包装成对象
       console.log(boolobj);

举例2:

    var str2="123";
    str2.length;
    str.len=4;//自动包装对象,结束销毁
    console.log(str.len);//undefined

    var obj={
        name:"obj",
    }
    console.log(obj.obj1.name);
    //obj.obj1返回的是undefined undefined不能包装成对象,所以obj.obj1.name会报错

四、原始类型数据和引用数据类型的存储

存储位置:

        1.原始数据类型:值存在栈中  

        2.引用数据类型:栈中存放地址,数据(值)存在堆中

注意:

        原始数据类型的相互赋值,不会影响到其他变量(在栈中存的是值,不是地址)

        栈中存引用数据的地址,指向堆中的地址,引用数据的内容存在堆中

举例:

        var a=1;
        var b=a;
        console.log(a,b)
        // 原始数据类型:值存在栈中   引用数据类型:栈中存放地址,数据(值)存在堆中
        // 原始数据类型的相互赋值,不会影响到其他变量(在栈中存的是值,不是地址)
        a=2;
        console.log(a,b)

        var obj={
            name:"obj"
        }
        var obj2=obj;//把obj2指向obj的地址
        obj.name="obj2";
        console.log(obj2);//name:obj2
        // 栈中存引用数据的地址,指向堆中的地址,引用数据的内容存在堆中
        // obj  obj2在栈中都指向obj 的地址,所以name会跟着一起改变
        obj=null;
        console.log(obj2);//将obj的地址变成null(断开了Obj 指向对堆中的地址,与obj2无关)
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值