# Var
# 定义变量
# var
var a // 定义了 a | |
a = 2 |
var 是定义变量的一种方式,它的作用于就是当前的局部环境,可以是函数里的局部变量。
a = 2 |
这样的未声明变量就是全局变量
var x =0; | |
function f(){ | |
var x=y=0 | |
} | |
f(); | |
console.log(x); | |
console.log(y); |
来看这段代码,打印是是 0 1
而不是报错未定义。因为 x
在全局被定义,而 y
虽然在函数 f
里被定义,但被声明为了全部变量。
但是注意,如果这样写:
function f(){ | |
var x,y=x=0; | |
} |
就会报错,因为定义 y 为局部变量。
多个变量初始化:
var x,y=x=0; |
还是看这个代码,它会先定义两个变量, x
和 y
,其中 x
会被先赋值为 0,然后再将 x 的值赋值给 y,最后两个变量都被初始化为 0.
但是如果是:
var x=y,y=0 | |
console.log(x,y) |
x 就是 undefined
,因为 x 用 y 赋值,而此时 y 还没有赋值。
重复定义:
var myName = 'Chris'; | |
var myName = 'Bob'; | |
console.log(myName) |
用 var
来重复定义变量不会报错。
# 变量提升
变量提升指的是:
由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明。这意味着变量可以在声明之前使用,这个行为叫做 “hoisting”。“hoisting” 就像是把所有的变量声明移动到函数或者全局代码的开头位置。
bla = 2 | |
var bla; | |
// ... | |
// 可以隐式地(implicitly)将以上代码理解为: | |
var bla; | |
bla = 2; |
说白了,就是用 var
声明的变量会把声明(注意是声明,而不是赋值)自动挪动到作用域的顶部。
console.log(s) | |
var s | |
s =2 | |
console.log(s) |
打印:
第一个打印代码 console.log(s)
, s
虽然没有定义,但是由于变量提升,var 挪动到了最前边,所以结果是 undefined
而不是报错。
# 数组
# 数组 push
push 是在后面进行插入
const array = [3, 2, 1] | |
const newFirstElement = 4 | |
array.push(newFirstElement) | |
var newArray = array | |
console.log(newArray); |
打印结果:
[ 3, 2, 1, 4 ]
用 pop()
来取出最后一个元素
# 在前面插入
const array = [3, 2, 1] | |
const newFirstElement = 4 | |
array.unshift(newFirstElement) // [ 4, 3, 2, 1 ] | |
console.log(array); |
用 unshift
在前面插入,用 shift
取出前面的那个数。