堆栈内存和作用域问题
堆栈内存和作用域问题
堆内存:存放引用类型值
栈内存:存放基本类型值和执行代码的环境
// example 1
let a = {}, b = '0', c = 0;
// 在以undefined、null、Number、String、Symbol、Boolean等基本类型做下标或者键时
// 只是在引用时都转换为字符串,存储扔以基本类型存储
a[b] = '瑞克';
a[c] = '莫蒂'; // 对象内属性名不能重复,数字属性名 == 字符串属性名
console.log(a[b]); // 莫蒂
// example 2
let a = {}, b = Symbol('1'), c = Symbol('1'); // Symbol 创建唯一值
// console.log(Symbol('1') === Symbol('1')); // fasle
a[b] = '瑞克';
a[c] = '莫蒂';
console.log(a[b]); // 瑞克
// example 3
let a = {}, b = {n: '1'}, c = {m: '2'};
// 在以对象作为键时,都会转换成字符串存储,所有对象转换成字符串(Object.toString)都是 "[object Object]"
a[b] = '瑞克';
a[c] = '莫蒂';
console.log(a[b]); // 培训
var test = (function (i) {
return function () {
alert(i *= 2); // alert弹出的值都是字符串
}
})(2);
test(5);
// 运行结果:弹出 "4"
var a = 0, b = 0;
function A(a) {
A = function (b) {
alert(a + b++);
}
alert(a++);
}
A(1);
A(2);

浙公网安备 33010602011771号