JavaScript note 1 - wanshanhu79/Study GitHub Wiki
<script type="text/javascript" src="./JavaScript.js" charset="UTF-8"></script>
type 和 charset两者必不可少,不然中文显示乱码。
ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量。使用的是 `,键盘上tab键上面的那个。
var name = '小明';
var age = 20;
var message = `你好, ${name}, 你今年${age}岁了!`;
alert(message);
多行字符串也是以 ` 开头
JavaScript把null,undefined、0、NaN和空字符串``视为false,其它一概为true。
JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有声明的变量“提”升到函数顶部,但不会提升变量
的赋值。
我们在函数内部定义变量时,请严格遵守“在函数内部首先声明所有变量”的原则
JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性。
JavaScript实际上只有一个全局作用域。任何变量(函数也视为变量),如果在当前函数作用域没有找到,就会继续向上查找,最后如果在全局作用域中也没有找到,则报ReferenceError错误。
不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。
减少冲突的一个方法是把自己的所有变量和函数绑定到一个全局变量中
// 唯一的全局变量MYAPP:
var MYAPP = {};
把自己的代码全部放入唯一的命名空间中,会大大减少全局变量冲突的可能。
由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的。为了解决块级作用域,ES6引入了新的关键字let,用let替代var可以申明一个块级作用域的变量.
const 也是新特性,与let一样,具有块级作用域。