JavaScript 变量提升

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。

JavaScript 初始化不会提升

JavaScript 只有声明的变量会提升,初始化的不会

在头部声明你的变量

对于大多数程序员来说并不知道 JavaScript 变量提升。
如果程序员不能很好的理解变量提升,他们写的程序就容易出现一些问题。
为了避免这些问题,通常我们在每个作用域开始前声明这些变量,这也是正常的 JavaScript 解析步骤,易于我们理解。

JavaScript 严格模式(use strict)

JavaScript 严格模式(strict mode)即在严格的条件下运行。

使用 "use strict" 指令

"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。
它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。
"use strict" 的目的是指定代码在严格条件下执行。
严格模式下你不能使用未声明的变量。
1.严格模式声明
严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明。
变量名不能使用 "eval" 字符串:
变量名不能使用 "arguments" 字符串:


image.png

赋值运算符应用错误

在 JavaScript 程序中如果你在 if 条件语句中使用赋值运算符的等号 (=) 将会产生一个错误结果, 正确的方法是使用比较运算符的两个等号 (==)。

比较运算符常见错误

在常规的比较中,数据类型是被忽略的

加法与连接注意事项

加法是两个数字相加。
连接是两个字符串连接。
JavaScript 的加法和连接都使用 + 运算符。

浮点型数据使用注意事项

JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。
所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定

 ```
结果:![image.png](http://upload-images.jianshu.io/upload_images/9137754-188cf59a95b03b5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
为解决以上问题,可以用整数的乘除法来解决:
实例
var z = (x * 10 + y * 10) / 10;       // z 的结果为 0.3
## JavaScript 字符串分行
JavaScript 允许我们在字符串中使用断行语句:
### 实例 1
var x =
"Hello World!";
但是,在字符串中直接使用回车换行是会报错的:
### 实例 2
var x = "Hello
World!";
**字符串断行需要使用反斜杠(\)**,如下所示:
实例 3
var x = "Hello \
World!";
1.错误的使用分号
以下实例中,if 语句失去方法体,原 if 语句的方法体作为独立的代码块被执行,导致错误的输出结果。
由于分号使用错误,if 语句中的代码块就一定会执行:
if (x == 19);
{
    // code block  
}
2.Return 语句使用注意事项
JavaScript 默认是在代码的最后一行自动结束。
以下两个实例返回结果是一样的(一个有分号一个没有)
实例 1
function myFunction(a) {
    var power = 10  
    return a * power
}
实例 2
function myFunction(a) {
    var power = 10;
    return a * power;
}
**不用对 return 语句进行断行。**
JavaScript 不支持使用名字来索引数组,只允许使用数字索引。
在 JavaScript 中, 对象 使用 名字作为索引。
如果你使用名字作为索引,当访问数组时,JavaScript 会把数组重新定义为标准对象。
执行这样操作后,数组的方法及属性将不能再使用,否则会产生错误:

定义数组元素,最后不能添加逗号

定义对象,最后不能添加逗号
Undefined 不是 Null
在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法。
对象只有被定义才有可能为 null,否则为 undefined。
如果我们想测试对象是否存在,在对象还没定义时将会抛出一个错误。
错误的使用方式:
if (myObj !== null && typeof myObj !== "undefined") 
正确的方式是我们需要先使用 typeof 来检测对象是否已定义:
if (typeof myObj !== "undefined" && myObj !== null) 
程序块作用域
在每个代码块中 JavaScript 不会创建一个新的作用域,一般各个代码块的作用域都是全局的。

你可能感兴趣的:(JavaScript 变量提升)