内存变量作用域问题
Posted 涳想傢
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存变量作用域问题相关的知识,希望对你有一定的参考价值。
1.关于引用变量
基本类型是指简单的数据段,引用类型是指那些可能由多个值组成的对象。
1.关于复制变量值
基本类型中,复制变量时,原本和副本相互独立存在,操作不会相互影响
var n1 = 5;
var n2 = n1;
引用类型中,复制变量时,实际上是复制对象的引用(地址),即两个变量同时指向一个地址,此时对一个变量进行操作,另一个变量也会受到影响。
2.关于参数传递
实质上与复制变量相似,基本类型参数传递后,函数内部操作对外部变量没影响,但是引用变量的参数传递中,函数局部变量的变化会体现在函数的外部
3.检测类型
typeof 是检测变量是字符串、数字、布尔值还是undefined的最佳工具
instanceof用来检测某个值是否是指定类型的对象
2.执行环境和作用域
1.执行环境
全局执行环境是最外围的一个执行环境,在Web浏览器中,全局执行环境是指window对象,因此所有的全局变量和函数都是作为window对象的属性和方法创建的。
某个执行环境所有代码执行完时,该环境会被销毁,保存在其中的所有变量和函数定义也随之销毁。(全局执行环境会在关闭网页或浏览器时才会被销毁)
当执行流进入一个函数时,函数的环境会被推入到一个环境栈中。当函数执行后,栈将环境弹出,将控制权交还给之前的执行环境。(摘自《javascript高级程序设计》)
2.内存中的函数对象
1.创建函数对象时:创建两个新对象
函数对象:函数定义
作用域链对象:保存函数对象可用变量的位置对象,默认第一项指向window对象
2.调用函数时:创建一个对象
活动对象:专门保存局部变量的对象
在作用域对象中追加对活动对象的引用
3.函数调用完成后:
作用域链中活动对象的引用出栈
活动对象由于无人引用而释放
以上是关于内存变量作用域问题的主要内容,如果未能解决你的问题,请参考以下文章