前端 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预解析机制 中详细讲解。
前端狗-原文链接