今天的学习

//变量是表示值的一个符号名字
//变量是通过var关键字声明的
var x; //声明一个变量x

//值可以通过等号赋值给变量
x = 1; //现在变量x的值为1

console.log(x); //=> 1:通过变量获取其值

//JavaScript支持多种数据类型
x = 1;          //数字型
x = 0.01;       //浮点型
x = "xxx";      //由双引号内的文本构成的字符串
x = 'xxx';      //由单引号内的文本构成的字符串
x = true;       //布尔值
x = false;      //另一个布尔值
x = null;       //null是一个特殊的值,意思是"空"
x = undefined;  //undefined和null非常类似,意思是"未定义"
//JavaScript中最重要的类型就是对象
//对象是名/值对的集合,或字符串到值映射的集合
var book = {            //对象是由花括号括起来的
    top: "JavaScript",  //属性'top'的值是'JavaScript'
    fat: true           //属性'fat'的值是true
};                      //右花括号标记了对象的结束

//通过"."或"[]"来访问对象属性
book.top                //=>"JavaScript"
book["fat"]             //=>true:另外一个获取属性的方法
book.author = "Flanagen"//通过赋值创建一个新属性
book.contents = {};     //{}是一个空对象,它没有属性

//JavaScript同样支持数组(以数字为索引的列表)
var primes = [2,3,5,7];        //拥有四个值的数组,由"["和"]"划定边界

primes[0];                     //=>2: 数组中的第一个元素
primes.length                  //=>4: 数组中的元素个数
primes[primes.length - 1];     //=>7: 数组的最后一个元素
primes[4] = 9;                 //通过赋值来添加新元素
primes[4] = 11;                //或通过赋值来改变已有的元素
var empty = [];                //[]是空数组,它具有0个元素
empty.length                   //=> 0
//数组和对象中都可以包含另一个数组或对象
var points = [                  //具有两个元素的数组
    {x: 0, y: 0},               //每个元素都是一个对象
    {x: 1, y: 1}
];

var data = {                    //一个包含两个属性的对象
    trial1: [[1, 2],[3,4]],     //每一个属性都是数组
    trial2: [[2, 3],[4,5]]      //数组的元素也都是数组
};
var a;

function b(){
    var a = 1;
}

b();

console.log(a);

//输出undefined
var a;

function b(){
    a = 1;
}

b();

console.log(a);

//输出1

作用域与两种,一种是全局作用域,一种是局部作用域

在函数体外部声明的变量是全局作用域,在函数体内部也可以使用

在函数体内部声明的变量是局部作用域,在函数体外部不能使用

声明不等于赋值,在函数体外部声明的变量,在函数体内部赋值,在函数体外部可以随时调用

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

如果在函数体内部声明的一个局部变量和全局变量重名,那么全局变量就会被局部变量覆盖。

var scope = "global";         //声明一个全局变量
function person(){
    var scope = "local";      //声明一个同名的局部变量
    return scope;             //返回局部变量的值,而不是全局变量的值
}
person();                     //=>"local"

在全局作用域编写代码时可以不写var语句,但声明局部变量时则必须使用var语句。

scope = "global";               //声明一个全局变量,不用var语句来声明
function person(){
    scope = "local";            //这就是修改了全局变量
    myscope = "123";            //这里是显式的声明了一个全局变量
    return [scope,myscope];     //返回两个值
}

person();                       //["local", "123"]: 产生了副作用

scope                           //=>"local":全局变量修改了

函数定义是可以嵌套的。由于每个函数都有它自己的作用域,因此会出现几个局部作用域嵌套的情况。

var scope = "global scope";           //全局变量
function person(){
    var scope = "local scope";        //局部变量
    function nested(){
        var scope = "nested scope";   //嵌套作用域内的局部变量
        return scope;                 //返回当前作用域内的值
    }
    return nested();
}

person();                             //=>嵌套作用域

//输出"nested scope"

 

转载于:https://my.oschina.net/u/3950339/blog/3047233

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值