重拾javascript系列-JS声明详解之var - 前端狗

前端 Js 声明语句详解 共三种。

第一种 var 也是大家最熟悉的。

语法 :

var varname1 = value1, varname2, varname3..., varnameN;

varnameN

变量名。变量名可以定义为任何合法标识符。

valueN

变量的初始化值。该值可以为任何合法表达式。

作用域:

1.声明变量的作用域限制在其声明位置的上下文中,而非声明变量总是全局的。

function x() {
  y = 1;      // 在严格模式下会抛出异常。
  var z = 2;
}
x();
console.log(y);
console.log(z);

2.声明变量在任何代码执行前创建,而非声明变量只有在执行赋值操作的时候才会被创建。

声明变量

var a;
console.log(a);                // undefined
console.log('still going...'); // still going...

非声明变量

console.log(b);                // 会抛出异常。
console.log('still going...'); // 永不执行

由于以上三个区别,声明变量的错误会导致不可预测的结果。于是,无论是否在函数中,我们总是推荐使用声明变量

在ECMAScript 5的严格模式(strict mode)下,给一个未声明的变量赋值会抛出错误。

变量声明预解析:

由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明。这意味着变量可以在声明之前使用,这个行为叫做“hoisting”。“hoisting”就像是把所有的变量声明移动到函数或者全局代码的开头位置。

console.log(c);     // undefined
var c = 'test hoisting';
console.log(c);     // test hoisting

可以理解为

var c;
console.log(c);     // undefined
c = 'test hoisting';
console.log(c);     // test hoisting

js预解析 还有很多妙不可言的地方。我会在 重拾javascript系列-JS预解析机制 中详细讲解。
前端狗-原文链接

posted @ 2016-06-21 22:08  R98585  阅读(549)  评论(0编辑  收藏  举报