变量、作用域和内存问题
2017-02-18 14:33:02 0 举报
AI智能生成
变量是计算机程序中用于存储数据的标识符,其值可以在程序执行过程中改变。作用域指的是变量在程序中的可见性和可访问性范围。内存问题是指在程序运行过程中对内存的分配、管理和释放不当可能导致的问题,如内存泄漏、野指针等。合理使用变量、作用域和内存管理能有效提高程序的性能和稳定性。
作者其他创作
大纲/内容
activity
ranklist
聊天
popularity
动态
temporary
4.1、基本类型和引用类型的值
基本类型(5中基本数据类型):按值访问,可以操作保存在变量中的值
引用类型:引用类型保存在内存中的对象。
js不允许直接访问内存中的位置,操作对象实际是
在操作对象的引用而不是实际的对象
js不允许直接访问内存中的位置,操作对象实际是
在操作对象的引用而不是实际的对象
区别
增加属性
引用类型:可以添加属性
基本类型:可以添加属性,虽然不会出错,
但是 使用的时候是undefined
但是 使用的时候是undefined
复制变量值
var num1 = 5;
var num2 = num1;
var num2 = num1;
num1中保存的值是5,当使用num1的值来初始化num2时,
javascript会新开辟一个空间,然后把num1的值复制给num2。
这两个变量是完全不一样的。
javascript会新开辟一个空间,然后把num1的值复制给num2。
这两个变量是完全不一样的。
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "欧丽珊";
var obj2 = obj1;
obj1.name = "欧丽珊";
变量obj1保存了一个对象的新实例,
obj1是一个指针,指向这个新实例,
复制的时候,在栈里新建一个空间,
然后在这个空间里放上obj1这个指针的副本,
obj1和obj2实际上都指向了同一个空间
obj1是一个指针,指向这个新实例,
复制的时候,在栈里新建一个空间,
然后在这个空间里放上obj1这个指针的副本,
obj1和obj2实际上都指向了同一个空间
new Object()就是在堆里开一个空间,
接着在栈开一个空间,这个空间存放指向堆
上的新空间的指针,即new会同时开两个空间
接着在栈开一个空间,这个空间存放指向堆
上的新空间的指针,即new会同时开两个空间
检测类型
基本类型用typeof
引用类型用instanceof
person instanceof Object;
colors instanceof Array;
pattern instanceof RegExp;
colors instanceof Array;
pattern instanceof RegExp;
4.2执行环境及作用域
what
每个执行环境都有一个与之关联的变量对象,
环境中定义的所有半两和函数都保存在这个对象中,
虽然我们编写的代码无法访问这个对象,但解析器
在处理数据时会在后台使用它。
环境中定义的所有半两和函数都保存在这个对象中,
虽然我们编写的代码无法访问这个对象,但解析器
在处理数据时会在后台使用它。
过程
全局执行环境是最外围的一个执行环境,在web浏览器中这个全局变量就是window对象,
某个执行环境中的所有代码执行完后,该环境被销毁,保存在其中的所有变量和函数定义也
随之销毁,一个函数就是一个作用域,作用域相关联就成为一条作用域链
某个执行环境中的所有代码执行完后,该环境被销毁,保存在其中的所有变量和函数定义也
随之销毁,一个函数就是一个作用域,作用域相关联就成为一条作用域链
4.2.2 没有块级作用域
for(var i = 0;i<10;i++){
}
alert(i);//10
}
alert(i);//10
对于有块级作用域的语言来说,for语句初始化变量的表达式所定义的变量,
只会存在于循环的环境之中。而对于js来说,由for语句创建的变量i即时在for
循环结束后,也依然会存在于循环外部的执行环境中。也就是说,js的变量是与
执行环境同在的。
只会存在于循环的环境之中。而对于js来说,由for语句创建的变量i即时在for
循环结束后,也依然会存在于循环外部的执行环境中。也就是说,js的变量是与
执行环境同在的。
function add(){
sum = num1+num2;
return sum;
}
var result = add(10,20);
alert(sum);//30
sum = num1+num2;
return sum;
}
var result = add(10,20);
alert(sum);//30
使用var声明的变量会自动被添加到最接近的环境中,
如果初始化变量时没有使用var声明,
该变量会自动被添加到全局环境
如果初始化变量时没有使用var声明,
该变量会自动被添加到全局环境
金币系统
CMS
fans
coupon
tag
0 条评论
下一页