JavaScript变量

2018-01-16  本文已影响0人  threetowns

一、变量声明

JavaScript有三种声明:

1. 变量求值

var a;
console.log('The value of a is ' + a); // The value of a is undefined

console.log('The value of b is ' + b); // The value of b is undefined
var b;

console.log('The value of c is ' + c); // Uncaught ReferenceError: c is not defined

let x;
console.log('The value of x is ' + x); // The value of x is undefined

console.log('The value of y is ' + y); // Uncaught ReferenceError: y is not defined
let y;
var a;
a + 2;  // Evaluates to NaN
var n = null;
console.log(n * 32); // Will log 0 to the console

2. 变量的作用域

if (true) {
  var x = 5;
}
console.log(x);  // x is 5

如果使用 ECMAScript 6 中的 let 声明,上述行为将发生变化。

if (true) {
  let y = 5;
}
console.log(y);  // ReferenceError: y is not defined

3. 变量声明提升

变量声明提升(variable hoisting),JavaScript 变量的另一特别之处是,你可以引用稍后声明的变量而不会引发异常,然而提升后的变量将返回 undefined 值。
1).

console.log(x === undefined); // true
var x = 3;

等价于

var x;
console.log(x === undefined); // true
x = 3;

2).

// will return a value of undefined
var myvar = 'my value';
 
(function() {
  console.log(myvar); // undefined
  var myvar = 'local value';
})();

等价于

// will return a value of undefined
var myvar = 'my value';
 
(function() {
  var myvar;
  console.log(myvar); // undefined
  myvar = 'local value';
})();
console.log(x); // ReferenceError
let x = 3;

二、函数提升

对于函数,只有函数声明会被提升到顶部,而不包括函数表达式(表达式定义的函数,称为匿名函数,匿名函数没有函数提升)。

foo(); // "bar"

function foo() {
  console.log('bar');
}
baz(); // TypeError: baz is not a function

var baz = function() {
  console.log('bar2');
};

【注】:此时的 baz 相当于一个声明的变量,类型为 undefined 。由于 baz 只是相当于一个变量,因此浏览器认为 baz() 不是一个函数。

参考

上一篇下一篇

猜你喜欢

热点阅读