变量,作用域和内存问题

1
JS的数据类型分为基本数据类型和引用数据类型
基本数据类型分为Undefined Null String Number Bool
关于引用数据类型
var a = new Object();
a.name = “lili”;
alert(a.name);//lili

但是基本数据类型是不能添加任何属性的
var a = “hello,world”;
a.name = “lili”;
alert(a.name);//undefined

2 复制变量值
基本数据类型进行复制时是值传递这里写图片描述
如图:num1 num2是独立的个体,他们之间不互相影响
在这里要插一句,typeof null === “object”,但是为什么Null也是基本数据类型呢 ,我想是因为Null在堆内存中不占据空间
但是在复制引用类型的时候是这样的
这里写图片描述
如图,对引用类型的复制时对对象的指针的复制,所以,可以看到两个变量都指向同一个Object

// quoteTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

class A
{
private:
    int a;
public:
    A(){}
    ~A() {}
    void setParam(int param )
    {
        a = param;
    }

    int getParam()
    {
        return a;   
    }
};

void Change(A& a)
{
    a.setParam(100);
}

void ChangeEx(A& a)
{
    a.setParam(100);
    A* b = new A();
    b->setParam(200);
    a = *b;
    //a = new A;
}

int _tmain(int argc, _TCHAR* argv[])
{
    A a;
    Change(a);
    cout<<a.getParam()<<endl;
    ChangeEx(a);
    cout<<a.getParam()<<endl;
    system("pause");
    return 0;
}

最后的运行结果这里写图片描述

所以,如果真是引用传递的话,改变传入参数的指针地址,那么外部参数的地址也会发生改变,看下JS

function setName(obj){
    obj.name = "xx";
    obj = new Object();
    obj.name = "zz";
}

var s = new Object();
s.name = "yy";

setName(s);

console.log(s.name);//输出xx

运行这段代码,我们发现还是输出xx,所以在函数内部,无法改变引用对象的指向地址,所以结论是 JS 的引用类型采用的是值传递
3 检测类型
平时我们检测类型使用的是typeof,但是typeof检测对象类型时只能告诉你是Object 所以 JS 提供了新的检测运算符
instanceof

var reg = /sid/g;
那么,通过instanceof 就可以探测到它是什么类型的对象
reg instanceof RegExp === true

4执行环境和作用域
执行环境是JS中一个重要的概念
全局执行环境是window对象 ,每个函数都有自己的执行环境,当函数流程进入一个函数时,函数的环境就会被推入环境栈中,当这个函数执行完成时,栈将其弹出

当代码在一个环境中执行时,会创建变量对象的作用域链以保证变量对象和函数的有序访问

var color = "blue";
function changeColor(){
    var anotherColor = "red";
    function swapColor(){
        var tempColor = anotherColor;
        anotherColor = color;
        color = tempColor;
        //这里可以访问 tempColor anotherColor color
    }
    //这里可以访问anotherColor color 但是无法访问 tempColor
    swapColor();
}
//这里只能访问color
changeColor();

以上代码中有三个执行环境:全局作用环境,changeColor的作用环境 swapColor的作用环境
全局作用域中有1个color,还有1个函数changeColor
changeColor有1个anotherColor 和 函数 swapColor,它可以访问anotherColor,也可以访问全局作用域中的color
swapColor 则可以访问函数内的tempColor 和他的父作用域的anotherColor 和全局作用域的color

用一张图来表示就是这里写图片描述

此外 catch 和 with 能延长作用域链

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校园失物招领网站的信息化建设,极大的方便了相关的工作人员对校园失物招领网站信息进行管理。 本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布寻物启事等功能。 管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限。管理员可以通过选择失物招领管理,管理相关的失物招领信息记录,比如进行查看失物招领信息标题,修改失物招领信息来源等操作。管理员可以通过选择公告管理,管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作。管理员可以通过选择公告类型管理,管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作。寻物启事管理页面,此页面提供给管理员的功能有:新增寻物启事,修改寻物启事,删除寻物启事。物品类型管理页面,此页面提供给管理员的功能有:新增物品类型,修改物品类型,删除物品类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值