TypeScript学习笔记之变量声明

var声明
在之前的javascript中,我们用var这个关键字来声明变量。 var声明可以在包含它的函数,模块,命名空间或全局作用域内部任何位置被访问。并且可以多次声明且不会报错。

/**
 * Created by yzq on 2017/1/6.
 */
var a;
var a=1;
var a="123"
function test(isGo) {
    if (isGo){
        var b=30;
    }
 return b;
}
console.log(a);//123
console.log(test(true));//30

let 声明
let和const是JavaScript里相对较新的变量声明方式。let与var的主要区别不在语法上,而是语义。
1)块作用域
当用let声明一个变量,它使用的是词法作用域或块作用域。 不同于使用 var声明的变量那样可以在包含它们的函数外访问,块作用域变量在包含它们的块或for循环之外是不能访问的。拥有块级作用域的变量的另一个特点是,它们不能在被声明之前读或写。

function f(input: boolean) {
    let a = 100;
    if (input) {

        let b = a + 1;
        return b;
    }
    return b;//错误!在这里是不能被访问的
}

2)重定义及屏蔽
重定义:在同一块作用域下不能重复声明变量。

function test(isGo){
    let str;
    if(isGo){
        let str1="123";
        str=function () {
            return str1;
        }
    }
    console.log(str());
    let str;//错误,不能再同一块作用下再次声明

}
test(true);

屏蔽:在一个嵌套作用域里引入一个新名字的行为称做屏蔽。 它是一把双刃剑,它可能会不小心地引入新问题,同时也可能会解决一些错误。

function a(){
    let num:Array=[1,2,3]
    /*用var定义的话,内层的i值回覆盖掉外层的i值,当内层循环完成后外层的i值也就变成了数组的长度*/
    for (var i=0;i

打印结果为
TypeScript学习笔记之变量声明_第1张图片

下面是用let声明

function a(){
    let num:Array=[1,2,3]
    /*用var定义的话,内层的i值回覆盖掉外层的i值,当内层循环完成后外层的i值也就变成了数组的长度*/

    /*用let定义的话,内层的i值会屏蔽掉外层的i值,不会影响外层i的值*/
    for (let i=0;i

TypeScript学习笔记之变量声明_第2张图片

3)块级作用域变量的获取
直观地讲,每次进入一个作用域时,它创建了一个变量的 环境。 就算作用域内代码已经执行完毕,这个环境与其捕获的变量依然存在。

function theCityThatAlwaysSleeps() {
    let getCity;

    if (true) {
        let city = "Seattle";
        getCity = function() {
            return city;
        }
    }

    return getCity();
}

因为我们已经在city的环境里获取到了city,所以就算if语句执行结束后我们仍然可以访问它。

const声明
const是对let的一个增强,它能阻止对一个变量再次赋值。要注意的是,const声明的变量必须给初始值。
简单来说,const类似于java中的final关键字。如果你的变量需要修改值,那么就用let声明,否则就用const声明。

你可能感兴趣的:(web前端,从零开始,学习web前端)