js数据类型:
原始类型:
数字、字符串、布尔值、null、undefined
对象类型:
对象(数组、函数、日期、error、RegExp)

在JavaScript 1.5及后续版本中可以使用const关键字来定义常量。常量可以看成不可重复赋值的变量(对常量更新赋值会失败但不报错),对常量的重复声明会报错。

javascript中没有块级作用域,javascript取而代之地使用了函数作用域;变量在声明他们的函数体以及这个函数体嵌套的任意函数体内都是有定义的。javascript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的。有意思的是,这意味着变量在声明之前甚至已经可用。javascript的这个特性被非正式地称为声明提前,即javascript函数里声明的所有变量(但不涉及赋值)都被“提前”至函数体的顶部。


javaScript中的函数作用域的概念:在函数中声明的变量在整个函数体内都是可见的(包括在嵌套的函数中),在函数的外部是不可见的。不在任何函数内声明的变量时全局变量,在整个javascript程序中都是可见的。在javascript中是无法声明只在一个代码块内可见的变量的。

词法作用域:函数的执行依赖于变量作用域,这个作用域是在函数定义时决定的,而不是函数调用时决定的。

javascript中this关键字

和变量不同,关键字this没有作用域的限制,嵌套的函数不会从调用它的函数中继承this。如果嵌套函数作为方法调用,其this的值指向调用它的对象。如果嵌套函数作为函数调用,其this值不是全局对象(非严格模式下)就是undefined(严格模式下)。很多人误以为调用嵌套函数时this会指向调用外层函数的上下文。如果你想访问这个外部函数的this值,需要将this的值保存在一个变量里,这个变量和内部函数都同在一个作用域内。通常使用变量self来保存this。