栈内存
计算机在内部开辟的一个空间,用于浏览器执行js代码,也叫执行环境栈(ECS)
执行上下文
大致分成三类:
-
全局执行上下文 全局对象window,简称EC(G)
-
函数执行上下文 任何一个函数都有自己特有的执行上下文
-
块级执行上下文(Eval) ES6认为由let或const加一个大括号形成的区域,就是一个块级上下文(作用域)
变量对象(VO)
变量对象就是存储某个区块代码中声明的值或变量的
var x = 10;
var y = x;
y = 24;
consoel.log(x) //10
var x = { n: 10 };
var y = x;
y["n"] = 24;
console.log(x.n) //24
var x = { n: 10 };
x['n'] = 20;
var y = x;
y = { n: 24};
console.log(x.n) // 20
var arr1 = [3,4];
var arr2 = arr1;
arr2[0] = 1;
arr2 = [4,5];
arr2[1] = 2;
arr1[1] = 0;
console.log(arr1,arr2) //[1,0],[4,2]
var x = { n: 10 };
var y = x;
x.x = x = { n: 24 };
console.log(x.x) //undefined
console.log(y) //{ n: 10 , x: { n: 24 } }
x.x = x = { n: 24 } ???? 对象通过 . 的形式进行取值或者是添加某个属性的操作,七优先级(19)仅次于圆括号(20);通过 = 的形式赋值的操作,其优先级为3. 故x.x = x = { n: 24 }等同于:
- x.x = { n: 24 }
- x = { n: 24 }
var x = [ 10, 24 ];
function f(y){
y[0] = 30;
y[1] = 3;
y = [3,30];
y[1] = 13;
console.log(y) //[3,13]
}
f(x);
console.log(x) //[30,3]
var obj = {
name: '零度',
getName: (function(x){
return x + '冰镇可乐';
})(obj.name)
}
console.log(obj.getName) //Uncaught TypeError: Cannot read properties of undefined (reading 'name')