JS 权威指南 第一部分 核心JS 第四章 变量

4.1 变量的类型

JS是非类型的

4.2 变量的声明

用var声明一个变量但没有声明时,值为undefined

如果不显式声明一个变量,JS将隐式声明它

重复声明:用var多次声明同一变量是合法的,且不会造成任何错误

隐式声明的变量总被创建为全局变量,即使该变量只在一个函数内使用。

4.3 变量的作用域

程序中定义这个变量的区域。

函数体内,局部变量的优先级比同名的全局变量高。

由于这种隐式的声明,为了避免混淆,在声明变量时都用var语句。

JS没有块级作用域(与C、C++、Java不同):

3层循环中i、j、k在Java中属于3个作用域,而在JS中属于一个作用域。

函数中声明的所有变量,无论在哪里声明的,在整个函数中他们都是有定义的。

var scope = "global";
function f() 
{
alert(scope);
var scope = "local";
}
f();

4.4 基本类型和引用类型

基本类型:在内存中有固定大小,直接存储的就是数据的值。

引用类型:对象有任意的长度,没有固定大小,所以变量存储的是对这个值的引用,通常引用的形式是指针或内存地址(到哪里找到这个值)。

4.5 垃圾收集

与C、C++不同,JS程序员不用手动释放已分配的资源,这点和Java一样。

4.6 作为属性的变量

JS中变量基本上和对象的属性是一样的。

全局对象:在JS解释器开始运行时,首先要做的事情之一就是在执行任何JS代码前,创建一个全局对象,这个对象的属性就是JS程序的全局变量,

当声明一个JS全局变量时,实际上所做的是定义了那个全局对象的一个属性。在客户端JS中,Window对象代表浏览器窗口,它是包含在

该窗口中的所有JS代码的全局对象。

局部变量:调用对象

全局变量时特殊的全局对象的属性,局部变量也是一个对象的属性,这个对象被称为调用对象(就是这个函数)。在执行一个函数时,函数的参数和局部变量是作为调用对象的属性而存储的。

JS执行环境:JS解释器每次开始执行一个函数时,都会为那个函数创建一个执行环境,而且具有自己的调用对象,在调用对象中定义了局部变量。所以,运行不属于任何 函数的JS代码的环境就是全局对象。而且,一个JS解释器可以在不同的全局执行环境中运行脚本,而且这些环境之间并不是完全脱节的,他们彼此可以互相引用。

4.7 深入理解变量作用域

每个JS执行环境都有一个和它关联在一起的作用域链,是一个对象列表或对象链。在JS顶层代码中,作用域链只有一个对象构成,就是全局对象。

在一个非嵌套的函数中,作用域链由两个对象构成,第一个是函数的调用对象,第二个是全局对象,以此类推。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值