美文网首页
JavaScript变量

JavaScript变量

作者: threetowns | 来源:发表于2018-01-16 11:47 被阅读0次

一、变量声明

JavaScript有三种声明:

  • var 声明一个变量
  • let 声明一个块作用域的局部变量(block scope local variable)
  • const 声明一个只读的常量。

1. 变量求值

  • varlet 声明的且未赋初值的变量,值会被设定为 undefined
  • 试图访问一个未声明的变量或者访问一个使用 let 声明的但未初始化的变量会导致一个 ReferenceError 异常被抛出。
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;
  • 数值类型环境中 undefined 值会被转换为 NaN。
var a;
a + 2;  // Evaluates to NaN
  • 当你对一个 null 变量求值时,空值 null 在数值类型环境中会被当作 0 来对待
var n = null;
console.log(n * 32); // Will log 0 to the console

2. 变量的作用域

  • 在所有函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问。
  • 在函数内部声明的变量,叫做局部变量,因为它只能在该函数内部访问。
  • 语句块作用域
    ECMAScript 6 之前的JavaScript没有 语句块作用域;相反,语句块中声明的变量将成为语句块所在代码段的局部变量。例如,如下的代码将在控制台输出 5,因为 x 的作用域是声明了 x 的那个函数(或全局范围),而不是 if 语句块。
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';
})();
  • 在 ECMAScript 2015 中,letconst)将不会提升变量到代码块的顶部。因此,在变量声明之前引用这个变量,将抛出错误 ReferenceError
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() 不是一个函数。

参考

相关文章

  • JS的基本语法--变量及类型

    1. 基本语法 声明(创建) JavaScript 变量在 JavaScript 中创建变量通常称为“声明”变量。...

  • 7 js 变量

    13 局部 JavaScript 变量在 JavaScript 函数内部声明的变量(使用 var)是局部变量,所以...

  • Javascript 变量、函数的声明

    javascript变量 全局变量和局部变量按照变量的作用域来区分,和大多数编程语言类似,javascript变量...

  • JavaScript 变量作用域和内存问题

    按照ECMAScript的定义,JavaScript的变量与其他语言的变量有很大区别。JavaScript变量松散...

  • javascript学习思维导图

    JavaScript 数据类型 JavaScript 变量 Javascript 运算符 JavaScript 流...

  • JavaScript函数闭包

    JavaScript闭包 JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。 全局变量1....

  • js语法难点

    javascript语法难点问题 Javascript的变量javascript语言和java语言一样变量是分为两...

  • js归纳总结——各种思维导图

    javascript DOM操作 javascript windows对象 javascript变量 javasc...

  • js语法

    JavaScript 变量 在编程语言中,变量用于存储数据值。 JavaScript 使用关键字var来定义变量,...

  • 变量

    JavaScript 变量JavaScript 变量是存储数据值的容器。 在本例中,x、y 和 z 是变量: 实例...

网友评论

      本文标题:JavaScript变量

      本文链接:https://www.haomeiwen.com/subject/nihsoxtx.html