Skip to content

Latest commit

 

History

History
223 lines (170 loc) · 4.63 KB

File metadata and controls

223 lines (170 loc) · 4.63 KB

javascript学习之变量

知识点:

  1. 变量的定义、作用、分类
  2. 变量声明和赋值
  3. 连续赋值*
  4. 变量作用域*
  5. 变量声明提升*

问题

//问题一
var a = 5;
var a;
console.log(a);

//问题二
var b;
console.log(b = 3);

//问题三
var l = m, m = 6;
console.log(l);
console.log(m);

//问题四
var x = 0;

function f(){
  var x = y = 1;
}
f();

console.log(x);
console.log(y);

//问题五
var a = {n:1};  
a.x = a = {n:2};  
alert(a.x);

//问题六
var a = 1;
function b() {
    a = 10;
    return;
 
    function a() {
    }
 
}
 
b();
alert(a);

//问题七
var x = 1;
function foo () {
    console.log(x);
}

function invokeFoo(){
    var x = 2;
    foo();
}
invokeFoo();

全局变量(global variable)和局部变量(local variable)

变量是用来存储数据的容器,变量的名称也叫标识符(identifier)。执行环境(执行上下文)定义了变量或函数有权访问其他数据,变量可以根据它所处的环境分为全局变量(在函数外,定义的变量)、局部变量(在函数内,使用var定义的变量)、块级变量(es6的新特性)

变量声明(variable declaration)

声明变量语句,使用var操作符,后面跟变量名(即一个标识符)

//声明变量
var a;
var b;

一条语句可以声明多个变量,由逗号,隔开

//一次声明多个变量
var c, d, e;

在声明一个变量的同时可以为这个变量分配一个值,如果没有声明,直接赋值的话,在非严格模式下,会认为成是全局变量,在严格模式下会 报错

//同时声明和赋值
var b = 2;

//没有声明,直接复制
c = 3; //不管在哪里定义,都会认为是全局变量,在严格模式报错,所以不建议这样做

一条语句声明多个变量同时为各自赋值 var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]];

//一次性声明多个变量,并且赋值
var a1 = 'qingzhui', a2 = 5, a3 = 6;

如果一个变量只是声明,没有赋值的话,其默认值是undefined

//只是声明一个变量,并没有赋值
var f;
console.log(f); //undefined

当一个变量既没有声明也没有赋值,就会报错

//打印一个没有赋值的变量
console.log(eee); //ReferenceError: eee is not defined

同一个变量只能声明一次

var g = 5;
var g; //无效
console.log(g); //5

同一个变量,可以被多次赋值

var h = 5;
h = 'qingzhui';
console.log(h) //'qingzhui'

变量赋值(variable assignment)

变量是用来存储数据的,所以变量赋值的过程是返回一个值的过程。

var i;
console.log(i = 3); //3

连续赋值

可以连续赋值

var j = 4;
var k = j;
console.log(j); //4
console.log(k); //4

//上面的可以理解为 var j, k = j = 4;
var l = m, m = 6;
console.log(l); //undefined
console.log(m); //6
var l = m = 6;
console.log(l); //6
console.log(m); //6
var x = 0;

function f(){
  var x = y = 1; // x在函数内部声明,y不是!
}
f();

console.log(x, y); // 0, 1
// x是全局变量。
// y是隐式声明的全局变量。
var a = {n:1};  
a.x = a = {n:2};  
alert(a.x); // --> undefined

var a = {n:1};
    a = {n:2}; //新的a
    a.x = {n:2}; //旧的a

alert(a.x); //新的a

变量作用域

在编程语言当中,作用域控制着变量与参数的可见性及生命周期。对于程序来说是一个非常实用的功能,它减少了名称冲突,并且提供了自动内存管理,提升性能。

变量声明提升(Name Hoisting)

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

console.log(a); //undefined
var a = 4;
console.log(a); //4, 赋值的过程
console.log(a); //报错
a = 4;

资源

MDN var

JavaScript 变量要点

JavaScript中的 变量、作用域链、执行上下文

深入ECMA-262-3第二章、变量对象

写了10年Javascript未必全了解的连续赋值运算

阮一峰javascript教程


更新时间:2015.10.06 状态: 编辑(修订中)