javascript变量

变量
变量类型
1.javascript变量是无类型的,这意味着javascript的变量可以存放任何类型的值,例如,在javascript中,可以把一个数值赋值给一个变量,然后再把一个字符串赋给它,这完全合法。
    var i = 10;
    i  = "hello";
有一个特性是与javascript缺少类型规则相关,即在必要时javascript可以快速自动的将一种
类型的值转换成另一种类型(数据类型转换)。


2.变量声明
在javascript程序中,使用一个变量之前,必须先声明,变量使用var 关键字声明,一个var 关键字可以同时声明多个变量,而且可以将声明变量和变量初始化绑定到一起。
var i = 0; message = "hello";
var 声明的变量未赋值时,它的初始值为undefined

3.重复声明变量和遗漏的声明
在javascript中使用var语句多次声明同一个变量是合法的。如果重复的声明有一个初始值,那么它担当的不过是一个赋值语句的角色。
如果尝试读一个未声明的变量值,javascript会生成一个错误。
如果尝试给一个未用var声明的变量赋值,javascript会隐式声明该变量,但是隐式声明的变量总是被创建为全局变量。

4.变量的作用域
一个变量的作用域(scope)是程序中定义这个变量的区域。全局变量的作用域是全局的。局部变量作用域是局部的。在函数体内部,局部变量的优先级比同名的全局变量高。 例如
var scope = "global";
function checkscope(){
    var scope = "local";
    document.write(scope);
}
checkscope();

5.没有块级作用域
和C++,JAVA不同,javascript没有块级作用域函数中声明的所有变量,无论在哪声明,在整个函数中它们都是有定义的 ,如下面代码中,变量I,j,k的作用域是相同的。它们3个在整个函数体都有效。
例子1
function test(s){
    var i = 0;                        //i在整个函数中有定义
    if(typeof s == "object"){
        var j = 3;                    //j到处都有定义,不仅限于这个代码块
        for(var k =0;k<10;k++){
            document.write(k);        //k到处都有定义,不仅限于该循环
        }
        document.write(k);            //k仍旧有定义,输出10
    }
    document.write(j);                //j仍旧有定义,输出3
}
test(new String());

例子2
var scope = "global";
function f(){
    alert(scope);            //显示"undefined",而不是"global"
    var scope = "local";    //变量在此处被初始化,但到处都有定义
    alert(scope);            //显示"local";
}
f();

例子2等价于
var scope = "global";
function f(){
    var scope;
    alert(scope);            //显示"undefined",而不是"global"
    var scope = "local";    //变量在此处被初始化,但到处都有定义
    alert(scope);            //显示"local";
}
f();

6.变量的基本类型和引用类型
基本类型(数值,布尔,null,undefined)在内存中有固定的大小,对象,数组,函数属于应用类型。
字符串是一个特例。

全局对象
当javascript解释器开始执行时,它首先要做的事情之一就是在执行任何javascript代码前,创建一个全局对象(global object) 。这个对象的属性就是javascript程序的全局变量。当声明一个全局变量时,实际上是做的是定义了那个全局对象的的一个属性。 在顶层代码中(不属于函数的javascript代码),你可以使用关键字this来引用这个全局对象。在函数内,this则另有用途。
在客户端javascript中,Window对象代表浏览器窗口。它是包含在该窗口中所有javascript的全局对象。

局部变量:调用对象
全局变量是特殊的全局对象的属性,局部变量也是一个对象的属性,这个对象被称为调用对象(call object)。在执行一个函数时,函数的参数和局部变量是作为这个调用对象的属性存储的。用一个完全独立的对象来存储局部变量使javascript可以防止局部变量覆盖同名的全局变量的值。

javascript的执行环境
一个执行环境就是所有javascript代码段执行时所在的环境,这个环境的一个重要部分就是定义变量的对象。因此,运行在不属于任何函数的javascript代码的环境使用的是全局对象,所有的javascript函数都运行在自己独有的执行环境,而且具有自己的调用对象,在调用对象中定义了局部变量。

深入理解变量的作用域
从词法结构上,全局变量具有全局作用域,而函数中声明的变量具有局部的作用域。如果一个函数定义嵌套在另一个函数中,那么嵌套的函数中声明的变量就具有嵌套的局部作用域。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值